Массивы типов значений и ссылочных типов




Массивы

В структуре данных массива можно хранить несколько переменных одного типа. Чтобы объявить массив, следует указать тип его элементов.

type[] arrayName;

В следующих примерах создаются одномерные массивы, многомерные массивы и массивы массивов:

Общие сведения о массивах

Массив имеет следующие свойства:

Массив может быть одномерным, многомерным или массивом массивов.

Количество измерений и длина каждого из измерений задаются, когда создается экземпляр массива. Эти значения нельзя изменить во время существования экземпляра.

Используемые по умолчанию значения числовых элементов массива равны нулю, и элементам ссылки присвоено значение NULL.

В массиве массивов элементы являются ссылочными типами и инициализируются значением null.

Массивы индексируются от нуля: массив с n элементами индексируется от 0 до n-1.

Элементы массива могут иметь любой тип, в том числе тип массива.

Типы массивов — это ссылочные типы, производные от абстрактного базового типа Array. Поскольку этот тип реализует IEnumerable и IEnumerable<T>, вы можете просматривать в цикле foreach любые массивы C#.

Массивы как объекты

В C# массивы представляют собой реальные объекты, а не просто адресуемые области непрерывной памяти, как в C и C++. Array — это абстрактный базовый тип для всех типов массивов. Вы можете использовать свойства и другие члены класса, входящие в Array. Например, с помощью свойства Length можно получить длину массива. В следующем коде значение длины массива numbers (5) присваивается переменной с именем lengthOfNumbers:

В классе Array представлено множество других полезных методов и свойств для сортировки, поиска и копирования массивов.

Пример

В этом примере используется свойство Rank, позволяющее отобразить число измерений массива.

Одномерные массивы

Вы можете объявить одномерный массив, содержащий пять целых чисел, как показано в следующем примере:

C#Копировать

int[] array = new int[5];

Этот массив содержит элементы с array[0] по array[4]. С помощью оператора newможно создать массив и инициализировать его элементы, используя значения по умолчанию. В этом примере при инициализации всем элементам массива присваиваются нулевые значения.

Таким же образом можно объявить массив, в котором хранятся строковые элементы. Пример:

string[] stringArray = new string[6];

Инициализация массива

Массив можно инициализировать при объявлении. В этом случае не требуется спецификатор ранга, поскольку он уже задается по числу элементов в списке инициализации. Пример:

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

Массив строк можно инициализировать таким же образом. Ниже приведено объявление массива строк, где каждый элемент массива инициализируется с использованием названия дня:

string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

Если массив инициализируется при объявлении, вы можете использовать следующие сочетания клавиш:

int[] array2 = { 1, 3, 5, 7, 9 };string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

Переменную массива можно объявить без инициализации, однако при присвоении массива этой переменной необходимо использовать оператор new. Пример:

int[] array3;array3 = new int[] { 1, 3, 5, 7, 9 }; // OK//array3 = {1, 3, 5, 7, 9}; // Error

В C# 3.0 представлены неявно типизированные массивы. Дополнительные сведения см. в разделе Неявно типизированные массивы.

Массивы типов значений и ссылочных типов

Рассмотрим следующее объявление массива:

SomeType[] array4 = new SomeType[10];

Результат этого оператора зависит от того, является ли SomeType типом значения или ссылочным типом. Если это тип значения, оператор создает массив из 10 элементов, каждый из которых имеет тип SomeType. Если SomeType является ссылочным типом, этот оператор создает массив из 10 элементов, каждый из которых инициализируется с использованием ссылки NULL.

Многомерные массивы

Массивы могут иметь несколько измерений. Например, следующее объявление создает двухмерный массив из четырех строк и двух столбцов.

int[,] array = new int[4, 2];

Следующее объявление создает массив из трех измерений: 4, 2 и 3.

int[,,] array1 = new int[4, 2, 3];

Инициализация массива

Массив можно инициализировать при объявлении, как показано в следующем примере.

// Two-dimensional array.int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };// The same array with dimensions specified.int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };// A similar array with string elements.string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" }, { "five", "six" } }; // Three-dimensional array.int[,,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };// The same array with dimensions specified.int[,,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; // Accessing array elements.System.Console.WriteLine(array2D[0, 0]);System.Console.WriteLine(array2D[0, 1]);System.Console.WriteLine(array2D[1, 0]);System.Console.WriteLine(array2D[1, 1]);System.Console.WriteLine(array2D[3, 0]);System.Console.WriteLine(array2Db[1, 0]);System.Console.WriteLine(array3Da[1, 0, 1]);System.Console.WriteLine(array3D[1, 1, 2]); // Getting the total count of elements or the length of a given dimension.var allLength = array3D.Length;var total = 1;for (int i = 0; i < array3D.Rank; i++) { total *= array3D.GetLength(i);}System.Console.WriteLine("{0} equals {1}", allLength, total); // Output:// 1// 2// 3// 4// 7// three// 8// 12// 12 equals 12

Также можно инициализировать массив без указания ранга.

int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

Чтобы объявить переменную массива без инициализации, используйте оператор new для присвоения массива переменной. Использование оператора new показано в следующем примере.

C#Копировать

int[,] array5;array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error

В следующем примере присваивается значение конкретному элементу массива.

array5[2, 1] = 25;

Аналогичным образом, в следующем примере получается значение конкретного элемента массива, которое присваивается переменной elementValue.

int elementValue = array5[2, 1];

В следующем примере кода элементы массива инициализируются с использованием значений по умолчанию (кроме массивов массивов).

int[,] array6 = new int[10, 10];

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: