КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Зубчатый двумерный массив
Предыдущие двумерные массивы можно сравнить с прямоугольной матрицей, все строки которой имеют одинаковое число элементов, трехмерный с кубом и т.д. Такие массивы можно назвать прямоугольными. Свойство Length определяет общее количество элементов, которое может хранить прямоугольный массив. Но язык C# поддерживает также двумерные массивы, в которых строки могут содержать разное количество элементов. Такие массивы называются зубчатыми (или ломаный, рваный). Зубчатый (jagged) двумерный массив представляет собой матрицу со строками разной длины. Зубчатые массивы используются редко, но в некоторых случаях они могут дать красивый экономный код. Зубчатые массивы создаются в два этапа:
В зубчатом двумерном массиве имеется два свойства Length. Если это свойство применить к самому массиву, то оно означает количество строк. Если его применить к отдельной строке, то оно будет означать длину этой строки. // Файл Program.cs using System;
class MyClass { public MyClass() { // Настройка консоли Console.Title = "Зубчатый массив"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false;
// Работа с зубчатым массивом const int ROWS = 4; // Количество строк int[][] jagged = new int[ROWS][]; // Создание шаблона
// Создание элементов строк как одномерных массивов jagged[0] = new int[3]; jagged[1] = new int[1]; jagged[2] = new int[4]; jagged[3] = new int[2];
// Наполнение значениями int count = 1; for (int row = 0; row < jagged.Length; row++) for (int col = 0; col < jagged[row].Length; col++) jagged[row][col] = count++;
// Печать Console.WriteLine("Первый зубчатый массив"); print(jagged);// Вызов вспомогательной функции Console.WriteLine();// Новая пустая строка
// К прежней ссылке цепляем новый зубчатый массив // Старый массив остается неадресуемым // и становится добычей сборщика мусора GC jagged = new int[][] // Шаблон и инициализация { new int[]{1, 2, 3, 4, 5}, new int[]{6, 7, 8}, new int[]{9, 10, 11, 12}, new int[]{13}, new int[]{14, 15, 16, 17, 18, 19, 20} };
// Печать Console.WriteLine("Второй зубчатый массив"); print(jagged);// Вызов вспомогательной функции Console.WriteLine();// Новая пустая строка
// Использование цикла foreach для перебора // всех элементов массива в порядке их следования Console.WriteLine("Перебор с помощью foreach"); for (int row = 0; row < jagged.Length; row++) { foreach (int elem in jagged[row]) Console.Write("{0, -4}", elem); Console.WriteLine(); } }
// Закатали в метод, т.к. код повторяется private void print(int[][] jagged) { for (int row = 0; row < jagged.Length; row++) { string str = ""; for (int col = 0; col < jagged[row].Length; col++) str += String.Format("{0, -4}", jagged[row][col]); Console.WriteLine(str); } } }
class Program { static void Main() { new MyClass();// Чтобы сработал конструктор // Для задержки консольного окна Console.ReadLine(); } }
Поскольку массивы - ссылочные типы, то присвоение одного массива другому ведет к созданию ссылок-псевдонимов на одну и ту же область памяти с содержимым самого массива. Чтобы действительно получить копию массива, можно воспользоваться статическим методом Array.Copy() или объектным методом array.CopyTo().
Дата добавления: 2014-01-07; Просмотров: 430; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |