Массивы (C# и Java)
Обновлен: Ноябрь 2007
Массивы представляют собой упорядоченные коллекции элементов с одним и тем же типом данных. Доступ к ним осуществляется при помощи имени массива в совокупности со смещением от начала массива нужного элемента. Существует несколько важных отличий в объявлении и использовании массивов в C# и Java.
Одномерный массив
Одномерный массив хранит фиксированное число элементов в линейном порядке, и для определения каждого элемента требуется лишь одно значение индекса. В C# квадратные скобки в объявлении массива должны следовать за типом данных; их нельзя поставить после имени переменной, как в Java. Поэтому массив типа integers объявляется с использованием следующего синтаксиса:
int[] arr1;
Следующее объявление является недопустимым в C#:
//int arr2[]; //compile error
После объявления массива необходимо установить его размер с помощью ключевого слова new, точно так же, как в Java. Ниже показано, как объявляется ссылка на массив.
int[] arr;
arr = new int[5]; // create a 5 element integer array
Доступ к элементам одномерного массива осуществляется при помощи синтаксиса, идентичного синтаксису Java. Индексы массива C# также отсчитываются с нуля. Следующий код осуществляет доступ к последнему элементу предыдущего массива:
System.Console.WriteLine(arr[4]); // access the 5th element
Инициализация
Элементы массива C# могут быть инициализированы при создании при помощи синтаксиса, аналогичного синтаксису Java.
int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};
В отличие от Java, в C# число инициализаторов должно точно соответствовать размеру массива. Этот факт можно использовать для объявления и инициализации массива C# в одной строке:
int[] arr1Line = {1, 2, 3, 4, 5};
Этот синтаксис создает массив, размер которого равен числу инициализаторов.
Инициализация в цикле программы
Другим способом инициализации массива в C# является использование цикла for. Следующий цикл обнуляет все элементы массива:
int[] TaxRates = new int[5];
for (int i=0; i<TaxRates.Length; i++)
{
TaxRates[i] = 0;
}
Массивы массивов
И C#, и Java поддерживают создание массивов массивов, или непрямоугольных массивов, в которых каждая строка содержит различное число столбцов. Например, в следующем массиве массивов содержится четыре записи в первой строке и три — во второй.
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];
Многомерные массивы
В C# можно создавать регулярные многомерные массивы, которые представляют собой матрицу значений одного типа. Массивы массивов поддерживаются как в C#, так и в Java, однако только C# поддерживает многомерные "массивы массивов массивов".
Объявите прямоугольный многомерный массив с помощью следующего синтаксиса:
int[,] arr2D; // declare the array reference
float[,,,] arr4D; // declare the array reference
После объявления данному массиву следует выделить память следующим образом:
arr2D = new int[5,4]; // allocate space for 5 x 4 integers
Затем для доступа к элементам массива используется приведенный ниже синтаксис:
arr2D[4,3] = 906;
Поскольку индексация массивов начинается с нуля, элементу в пятом столбце четвертой строки присваивается значение 906.
Инициализация
Многомерные массивы можно создавать, настраивать и инициализировать в одном операторе любым из следующих методов.
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,] { {1,2,3}, {4,5,6} };
int[,] arr6 = { {1,2,3}, {4,5,6} };
Инициализация в цикле программы
Все элементы массива могут быть инициализированы посредством вложенного цикла, как показано ниже.
int[,] arr7 = new int[5,4];
for(int i=0; i<5; i++)
{
for(int j=0; i<4; j++)
{
arr7[i,j] = 0; // initialize each element to zero
}
}
Класс System.Array
В платформе .NET Framework массивы реализуются как экземпляры класса Array. Этот класс обеспечивает несколько ценных методов, например Sort и Reverse.
Следующий пример демонстрирует, насколько просто работать с этими методами. Сначала меняется порядок элементов в массиве с помощью метода Reverse, затем элементы сортируются методом Sort.
class ArrayMethods
{
static void Main()
{
// Create a string array of size 5:
string[] employeeNames = new string[5];
// Read 5 employee names from user:
System.Console.WriteLine("Enter five employee names:");
for(int i=0; i<employeeNames.Length; i++)
{
employeeNames[i]= System.Console.ReadLine();
}
// Print the array in original order:
System.Console.WriteLine("\nArray in Original Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Reverse the array:
System.Array.Reverse(employeeNames);
// Print the array in reverse order:
System.Console.WriteLine("\n\nArray in Reverse Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Sort the array:
System.Array.Sort(employeeNames);
// Print the array in sorted order:
System.Console.WriteLine("\n\nArray in Sorted Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
}
}
Результат
Enter five employee names:
Luca
Angie
Brian
Kent
Beatriz
Array in Original Order:
Luca Angie Brian Kent Beatriz
Array in Reverse Order:
Beatriz Kent Brian Angie Luca
Array in Sorted Order:
Angie Beatriz Brian Kent Luca
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Массивы (Руководство по программированию на C#)