- Массивы (Руководство по программированию на C#)
- Пример
- Общие сведения о массивах
- Поведение значения по умолчанию
- Массивы как объекты
- См. также раздел
- Array. Length Свойство
- Значение свойства
- Исключения
- Примеры
- Комментарии
- Применяется к
- См. также раздел
- Multidimensional Arrays (C# Programming Guide)
- Array Initialization
- See also
- Многомерные массивы (Руководство по программированию на C#)
- Инициализация массива
- См. также
Массивы (Руководство по программированию на C#)
В структуре данных массива можно хранить несколько переменных одного типа. Чтобы объявить массив, следует указать тип его элементов. Если требуется, чтобы массив мог хранить элементы любого типа, можно указать object в качестве его типа. В унифицированной системе типов C# все типы, стандартные и определяемые пользователем, ссылочные типы и типы значений напрямую или косвенно наследуются из Object.
Пример
В следующих примерах создаются одномерные массивы, многомерные массивы и массивы массивов:
class TestArraysClass < static void Main() < // Declare a single-dimensional array of 5 integers. int[] array1 = new int[5]; // Declare and set array element values. int[] array2 = new int[] < 1, 3, 5, 7, 9 >; // Alternative syntax. int[] array3 = < 1, 2, 3, 4, 5, 6 >; // Declare a two dimensional array. int[,] multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values. int[,] multiDimensionalArray2 = < < 1, 2, 3 >, < 4, 5, 6 >>; // Declare a jagged array. int[][] jaggedArray = new int[6][]; // Set the values of the first array in the jagged array structure. jaggedArray[0] = new int[4] < 1, 2, 3, 4 >; > >
Общие сведения о массивах
Массив имеет следующие свойства:
- Массив может быть одномерным, многомерным или массивом массивов.
- Количество измерений и длина каждого из измерений задаются, когда создается экземпляр массива. Эти значения нельзя изменить во время существования экземпляра.
- Используемые по умолчанию значения числовых элементов массива равны нулю, и элементам ссылки присвоено значение null .
- В массиве массивов элементы являются ссылочными типами и инициализируются значением null .
- Массивы индексируются от нуля: массив с n элементами индексируется от 0 до n-1 .
- Элементы массива могут иметь любой тип, в том числе тип массива.
- Типы массивов — это ссылочные типы, производные от абстрактного базового типа . Все массивы реализуют IList и IEnumerable. Для итерации по массиву можно использовать оператор foreach. Одномерные массивы также реализуют IList и IEnumerable .
Поведение значения по умолчанию
- Для типов значений элементы массива инициализируются со значением по умолчанию — шаблоном с нулевыми битами; элементы будут иметь значение .
- Все ссылочные типы (в том числе не допускающие значения NULL) имеют значения .
- Для типов, допускающих значения NULL, параметр HasValue имеет значение false , а для элементов будет установлено значение null .
Массивы как объекты
В C# массивы представляют собой реальные объекты, а не просто адресуемые области непрерывной памяти, как в C и C++. Array — это абстрактный базовый тип для всех типов массивов. Вы можете использовать свойства и другие члены класса, входящие в Array. Например, с помощью свойства Length можно получить длину массива. В следующем коде значение длины массива numbers ( 5 ) присваивается переменной с именем lengthOfNumbers :
int[] numbers = < 1, 2, 3, 4, 5 >; int lengthOfNumbers = numbers.Length;
В классе Array представлено множество других полезных методов и свойств для сортировки, поиска и копирования массивов. В следующем примере свойство Rank используется для отображения количества измерений массива.
class TestArraysClass < static void Main() < // Declare and initialize an array. int[,] theArray = new int[5, 10]; System.Console.WriteLine("The array has dimensions.", theArray.Rank); > > // Output: The array has 2 dimensions.
См. также раздел
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
Array. Length Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает общее число элементов во всех измерениях массива Array.
public: property int Length < int get(); >;
Public ReadOnly Property Length As Integer
Значение свойства
Общее число элементов во всех измерениях массива Array; ноль, если в массиве нет элементов.
Исключения
Массив является многомерным и содержит больше элементов Int32.MaxValue .
Примеры
В следующем примере свойство используется Length для получения общего количества элементов в массиве. Он также использует GetUpperBound метод для определения количества элементов в каждом измерении многомерного массива.
using System; public class Example < public static void Main() < // Declare a single-dimensional string array String[] array1d = < "zero", "one", "two", "three" >; ShowArrayInfo(array1d); // Declare a two-dimensional string array String[,] array2d = < < "zero", "0" >, < "one", "1" >, < "two", "2" >, < "three", "3">, < "four", "4" >, < "five", "5" >>; ShowArrayInfo(array2d); // Declare a three-dimensional integer array int[, ,] array3d = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; ShowArrayInfo(array3d); > private static void ShowArrayInfo(Array arr) < Console.WriteLine("Length of Array: ", arr.Length); Console.WriteLine("Number of Dimensions: ", arr.Rank); // For multidimensional arrays, show number of elements in each dimension. if (arr.Rank > 1) < for (int dimension = 1; dimension : ", dimension, arr.GetUpperBound(dimension - 1) + 1); > Console.WriteLine(); > > // The example displays the following output: // Length of Array: 4 // Number of Dimensions: 1 // // Length of Array: 12 // Number of Dimensions: 2 // Dimension 1: 6 // Dimension 2: 2 // // Length of Array: 12 // Number of Dimensions: 3 // Dimension 1: 2 // Dimension 2: 2 // Dimension 3: 3
open System let showArrayInfo (arr: Array) = printfn $"Length of Array: " printfn $"Number of Dimensions: " // For multidimensional arrays, show number of elements in each dimension. if arr.Rank > 1 then for dimension = 1 to arr.Rank do printfn $" Dimension : " printfn "" // Declare a single-dimensional string array let array1d = [| "zero"; "one"; "two"; "three" |] showArrayInfo array1d // Declare a two-dimensional string array let array2d = array2D [ [ "zero"; "0" ]; [ "one"; "1" ] [ "two"; "2" ]; [ "three"; "3" ] [ "four"; "4" ]; [ "five"; "5" ] ] showArrayInfo array2d // Declare a three-dimensional integer array let array3d = Array3D.create 2 2 3 "zero" showArrayInfo array3d // The example displays the following output: // Length of Array: 4 // Number of Dimensions: 1 // // Length of Array: 12 // Number of Dimensions: 2 // Dimension 1: 6 // Dimension 2: 2 // // Length of Array: 12 // Number of Dimensions: 3 // Dimension 1: 2 // Dimension 2: 2 // Dimension 3: 3
Module Example Public Sub Main() ' Declare a single-dimensional string array Dim array1d() As String = ShowArrayInfo(array1d) ' Declare a two-dimensional string array Dim array2d(,) As String = , , , , , > ShowArrayInfo(array2d) ' Declare a three-dimensional integer array Dim array3d(,,) As Integer = New Integer(,,) , >, , >> ShowArrayInfo(array3d) End Sub Private Sub ShowArrayInfo(arr As Array) Console.WriteLine("Length of Array: ", arr.Length) Console.WriteLine("Number of Dimensions: ", arr.Rank) ' For multidimensional arrays, show number of elements in each dimension. If arr.Rank > 1 Then For dimension As Integer = 1 To arr.Rank Console.WriteLine(" Dimension : ", dimension, arr.GetUpperBound(dimension - 1) + 1) Next End If Console.WriteLine() End Sub End Module ' The example displays the following output: ' Length of Array: 4 ' Number of Dimensions: 1 ' ' Length of Array: 12 ' Number of Dimensions: 2 ' Dimension 1: 6 ' Dimension 2: 2 ' ' Length of Array: 12 ' Number of Dimensions: 3 ' Dimension 1: 2 ' Dimension 2: 2 ' Dimension 3: 3
Комментарии
Получение значения данного свойства является операцией порядка сложности O(1).
Применяется к
См. также раздел
Multidimensional Arrays (C# Programming Guide)
Arrays can have more than one dimension. For example, the following declaration creates a two-dimensional array of four rows and two columns.
The following declaration creates an array of three dimensions, 4, 2, and 3.
Array Initialization
You can initialize the array upon declaration, as is shown in the following example.
// 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(" equals ", allLength, total); // Output: // 1 // 2 // 3 // 4 // 7 // three // 8 // 12 // 12 equals 12
You can also initialize the array without specifying the rank.
If you choose to declare an array variable without initialization, you must use the new operator to assign an array to the variable. The use of new is shown in the following example.
int[,] array5; array5 = new int[,] < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>; // OK //array5 = , , , >; // Error
The following example assigns a value to a particular array element.
Similarly, the following example gets the value of a particular array element and assigns it to variable elementValue .
int elementValue = array5[2, 1];
The following code example initializes the array elements to default values (except for jagged arrays).
See also
Многомерные массивы (Руководство по программированию на C#)
Массивы могут иметь несколько измерений. Например, следующее объявление создает двухмерный массив из четырех строк и двух столбцов.
Следующее объявление создает массив из трех измерений: 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(" equals ", allLength, total); // Output: // 1 // 2 // 3 // 4 // 7 // three // 8 // 12 // 12 equals 12
Можно также инициализировать массив без указания ранга.
Чтобы объявить переменную массива без инициализации, используйте оператор new для присвоения массива переменной. Использование оператора new показано в следующем примере.
int[,] array5; array5 = new int[,] < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>; // OK //array5 = , , , >; // Error
В следующем примере присваивается значение конкретному элементу массива.
Аналогичным образом, в следующем примере получается значение конкретного элемента массива, которое присваивается переменной elementValue .
int elementValue = array5[2, 1];
В следующем примере кода элементы массива инициализируются с использованием значений по умолчанию (кроме массивов массивов).