Студопедия

КАТЕГОРИИ:


Архитектура-(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) двумерный массив представляет собой матрицу со строками разной длины. Зубчатые массивы используются редко, но в некоторых случаях они могут дать красивый экономный код.

Зубчатые массивы создаются в два этапа:

  • Сначала создается шаблон с фиксированным количеством строк по следующему синтаксису тип[][] имя = new тип[размер][];
  • Затем для каждой строки создается одномерный массив того же типа с заданным количеством элементов

В зубчатом двумерном массиве имеется два свойства 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; Просмотров: 412; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.