* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Массивы
7 февраля 2009
Массивы позволяют работать с группами однотипных значений или объектов. При помощи массивов удается объединить набор переменных в группу и обращаться к этим переменным по индексу в массиве. Можно перебирать эти переменные (все или выборочно) в цикле, проверяя или изменяя их значения, или же создавать мно- гомерные массивы. У массивов .NET Framework имеется встроенная функциональ- ность, достаточная для решения большинства типовых задач обработки массивов. Объявление и инициализация массивов
Массив разрешается объявить и инициализировать одним оператором, указав тип элементов массива и их число. Нумерация элементов массивов в Visual Basic .NET и Visual C# начинается с нуля — индекс первого элемента равен нулю, далее эле- менты нумеруются последовательно. В Visual Basic .NET число элементов массива задают путем указания его верхней границы. Верхняя граница массива — это индекс его последнего элемента. В Visual C# число элементов массива задают иначе, ука- зывая его при объявлении массива. Так, верхняя граница массива, объявленного на Visual C#, всегда на единицу меньше числа его элементов. Следующий пример де- монстрирует объявление и инициализацию массива целых чисел: Visual Basic .NET 1 Объявить и инициализировать массив из 33 целых чисел, ' проиндексировав его от 0 до 32. Dim mylntegers(32) As Integer Visual C# // Объявить и инициализировать массив из 33 целых чисел, // проиндексировав его от 0 до 32. int[] mylntegers = new int[32]; Впрочем, объявлять и инициализировать массивы можно в два этапа. В Visual С# в одной строке разрешается объявить массив, а в другой — динамически иници- ализировать его, как показано ниже: Visual C# // В этой строке объявляем массив, int[] mylntegers; // а в этой - записываем в него 32 элемента. mylntegers = new int[32]: Visual Basic .NET также позволяет динамически инициализировать массивы, но применяемый для этого синтаксис менее гибок. Если массив объявляется без ука- зания числа его элементов, при инициализации все элементы необходимо инициа- лизировать. Начальные значения элементов массива заключают в фигурные скобки и разделяют запятыми, например, так: Visual Basic .NET В этой строке объявляем массив, Dim mylntegersO As Integer а в этой - записываем в него шесть членов, попутно присваивая им значения. mylntegers = New Integer() {0,1,2,3,4,5} Во время выполнения можно изменить размер массива, переопределив его. В Visual C# для этого достаточно инициализировать массив повторно: Visual C# // Объявить и инициализировать массив. int[] mylntegers = new int[32]; // Инициализировать массив заново, mylntegers = new int[45]; Для изменения числа элементов массива в Visual Basic .NET применяют опера- тор ReDim: Visual Basic .NET Dim mylntegers(32) As Integer Инициализировать массив заново. ReDim mylntegers(45) As Integer В предыдущих примерах повторная инициализация массива приводила к потере всех хранимых в нем данных. В Visual Basic .NET имеется ключевое слово Preserve, которое заставляет сохранять данные массива при его повторной инициализации; увы, в Visual C# это невозможно. Visual Basic .NET Объявить массив и записать в него четыре элемента. Dim mylntegersO As Integer = {0,1,2,3} Инициализировать массив заново, сохранив значения ' элементов с индексами 0-3. ReDim Preserve mylntegers(IO) Создание массивов ссылочных типов несколько отличается. После объявления и инициализации получается массив, заполненный не значениями, а пустыми (null) ссылками на объекты указанного типа. Чтобы заполнить массив реальными объек- тами, следует записать в каждый элемент массива ссылку на новый или существую- щий объект данного типа: Visual Basic .NET ' Создать массив объектов Widget, поместив во все элементы пустые ссылки на объект Widget Dim Widgets(10) as Widget ' Поместить в элемент Widgets[0] ссылку на новый объект Widget Widgets(O) = New WidgetO Присвоить элементу Widgets[1] ссылку на существующий объект Widget Dim aWidget As New WidgetO WidgetsO) = aWidget 1 Перебрать в цикле элементы массива Widgets с индексами 2-10, ' записывая в них ссылки на новые объекты Widget. Dim Counter as Integer For Counter = 2 to 10 Widgets(Counter) = New WidgetO Next Visual C# // Создать массив объектов Widget, поместив // во все элементы пустые ссылки на объект Widget Widget[] Widgets = new Widget[11]; // Присвоить элементу Widgets[0] ссылку на существующий объект Widget Widgets[0] = new WidgetO; // Присваиваем Widgets[1] ссылку на существующий объект Widget Widget aWidget = new WidgetO; Widgets[1] = aWidget; // Перебрать в цикле элементы массива Widgets с индексами 2-10, // записывая в них ссылки на новые объекты Widget. for (int Counter = 2; Counter < 11; Counte'-++) { Widgets[Counter] - new WidgetO; Многомерные массивы Пока мы рассмотрели только линейные массивы, то есть массивы с единственным измерением. Кроме них .NET Framework поддерживает два типа многомерных мас- сивов: прямоугольные ( rectangular) и невыровненные (jagged). Прямоугольные массивы Любое измерение прямоугольного массива образовано элементами, сформирован- ными в свою очередь из одинакового числа элементов. Так, двумерный массив мож- но представить как таблицу, состоящую из строк с одинаковым числом ячеек. Прямоугольные массивы создают, указывая в объявлении дополнительные из- мерения. Далее показаны примеры различных способов объявления многомерных прямоугольных массивов: Visual Basic .NET ' Объявить массив размером 5x3. Dim intArrays(4, 2} As Integer Объявить двумерный массив и задать начальные значения для его элементов. Dim intArrays(,) As Integer = {{1, 2, 3}, {4, 5, 6}} ' Объявить трехмерный массив и задать начальные значения для его элементов. Dim cubeArray(, ,) As Integer = {{{7, 2}, {1, 4}}, {{3. 5}, {4, 4}}} ' Объявить многомерный массив размером 3?3?4?5?6. Dim cornplexArray(2, 2, 3, 4, 5) As Integer Visual C# // Объявить массив размером 5x3. int[ , ] intArrays - new int[5. 3]; // Объявить двумерный массив и задать начальные значения для его элементов. int[ , ] intArrays - {{1, 2, 3}, {4, 5, 6}}: // Объявить трехмерный массив и задать начальные значения для его элементов. int[ , , ] cubeArray - {{{7, 2}, {1, 4}}, {{3, 5}. {4, 4}}}: // Объявить многомерный массив размером 3x3x4x5x6. int[ . , , , ] complexArray = new int[3, 3, 4, 5, 6]; Невыровненные массивы Многомерные массивы другого типа называются невыровненными. Двумерный не- выровненный массив можно представить в виде таблицы, образованной строками с разным числом ячеек, такой, как таблица, каждая строка которой представляет се- мью, а число ячеек в строке равно числу членов этой семьи. Ясно, что строки в такой таблице разной длины. Для представления этой и подобных ей таблиц при- меняются невыровненные массивы. На самом деле невыровненный массив — это массив массивов. Чтобы его со- здать, необходимо объявить массив, элементами которого являются другие масси- вы. Для этого потребуется несколько пар скобок, причем размер невыровненного массива указывают в первой скобке. Вот как это делается: Visual Basic .NET Объявить массив из 3 массивов. Dim Families(2)() As String Инициализировать первый массив 4 элементами, присвоив им значения. Families(O) = New StringO {"Smith", "Mom", "Dad", "Uncle Phil"} Инициализировать второй массив 5 элементами, присвоив им значения. Farrilies(l) = New StringO ("Jones", "Mom", "Dad", "Suzie", "Little Bobby"} 1 Инициализировать третий массив 3 элементами, присвоив им значения, Families(2) = New StringO {"Williams", "Earl", "Bob"} Visual C# // Объявить массив из 3 массивов. string[][] Families = new string[3][]; // Инициализировать первый массив 4 элементами, присвоив им значения. Families[0] = new string[] {"Smith", "Mom". "Dad", "Uncle Phil"}; // Инициализировать второй массив 5 элементами, присвоив им значения. Farnilies[1] - new stringt] {"Jones", "Mom", "Dad", "Suzie", "Little Bobby"}; // Инициализировать третий массив 3 элементами, присвоив им значения. Families[2] = new stringt] {"Williams", "Earl", "Bob"};