Массивы (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#)

Другие ресурсы

Язык программирования C# для разработчиков на Java