Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Массивы и строки.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
129 Кб
Скачать
☆

7.1.5.1 Применение свойства Length при обращении со ступенчатыми массивами

Особый случай представляет применение свойства Length при обращении со сту­пенчатыми массивами. В этом случае с помощью данного свойства можно получить длину каждого массива, составляющего ступенчатый массив. В качестве примера рас­смотрим следующую программу, в которой имитируется работа центрального про­цессора (ЦП) в сети, состоящей из четырех узлов.

Листинг 7.13

// Продемонстрировать применение свойства Length

// при обращении со ступенчатыми массивами.

using System;

class Jagged

{

static void Main()

{

int[][] network_nodes = new int[4][];

network_nodes[0] = new int[3];

network_nodes[1] = new int[7];

network_nodes[2] = new int[2];

network_nodes[3] = new int[5];

int i, j;

// Сфабриковать данные об использовании ЦП.

for(i=0; i < network_nodes.Length; i++)

for(j=0; j < network_nodes[i].Length; j++)

network_nodes[i][j] = i * j + 70;

Console.WriteLine("Общее количество узлов сети: " +

network_nodes.Length + "\n");

for(i=0; i < network_nodes.Length; i++) {

for(j=0; j < network_nodes[i].Length; j++) {

Console.Write("Использование ЦП в узле сети " + i +

" ЦП " + j + ": ");

Console.Write(network_nodes[i][j] + "% ");

Console.WriteLine();

}

Console.WriteLine();

}

}

}

При выполнении этой программы получается следующий результат.

Общее количество узлов сети: 4

Использование в узле 0 ЦП 0: 70%

Использование в узле 0 ЦП 1: 70%

Использование в узле 0 ЦП 2: 70%

Использование в узле 1 ЦП 0: 70%

Использование в узле 1 ЦП 1: 71%

Использование в узле 1 ЦП 2: 72%

Использование в узле 1 ЦП 3: 73%

Использование в узле 1 ЦП 4: 74%

Использование в узле 1 ЦП 5: 75%

Использование в узле 1 ЦП 6: 76%

Использование в узле 2 ЦП 0: 70%

Использование в узле 2 ЦП 1: 72%

Использование в узле 3 ЦП 0: 70%

Использование в узле 3 ЦП 1: 73%

Использование в узле 3 ЦП 2: 76%

Использование в узле 3 ЦП 3: 79%

Использование в узле 3 ЦП 4: 82%

Обратите особое внимание на то, как свойство Length используется в ступенчатом массиве network_nodes. Напомним, что двумерный ступенчатый массив представля­ет собой массив массивов. Следовательно, когда используется выражение

network_nodes.Length

то в нем определяется число массивов, хранящихся в массиве network_nodes (в дан­ном случае  четыре массива). А для получения длины любого отдельного массива, составляющего ступенчатый массив, служит следующее выражение.

network_nodes [0].Length

В данном случае это длина первого массива.

7.1.6 Неявно типизированные массивы

В версии C# 3.0 появилась возможность объявлять неявно типизированные переменные с помощью ключевого слова var. Это переменные, тип которых определяется компилятором, исходя из типа инициализирующего выраже­ния. Следовательно, все неявно типизированные переменные должны быть непремен­но инициализированы. Используя тот же самый механизм, можно создать и неявно типизированный массив. Как правило, неявно типизированные массивы предназна­чены для применения в определенного рода вызовах, включающих в себя элементы языка LINQ. А в большинстве остальных случаев используется "обычное" объявление массивов. Неявно типизированные массивы рас­сматриваются здесь лишь ради полноты представления о возможностях языка С#.

Неявно типизированный массив объявляется с помощью ключевого слова var, но без последующих квадратных скобок []. Кроме того, неявно типизированный мас­сив должен быть непременно инициализирован, поскольку по типу инициализато­ров определяется тип элементов данного массива. Все инициализаторы должны быть одного и того же согласованного типа. Ниже приведен пример объявления неявно ти­пизированного массива.

var vals = new[] { 1, 2, 3, 4, 5 };

В данном примере создается массив типа int, состоящий из пяти элементов. Ссыл­ка на этот массив присваивается переменной vals. Следовательно, тип этой перемен­ной соответствует типу int массива, состоящего из пяти элементов. Обратите внима­ние на то, что в левой части приведенного выше выражения отсутствуют квадратные скобки []. А в правой части этого выражения, где происходит инициализация масси­ва, квадратные скобки присутствуют. В данном контексте они обязательны.

Рассмотрим еще один пример, в котором создается двумерный массив типа double.

var vals = new[,] { {1.1, 2.2}, {3.3, 4.4}, { 5.5, 6.6} };

В данном случае получается массив vals размерами 2x3.

Объявлять можно также неявно типизированные ступенчатые массивы. В качестве примера рассмотрим следующую программу.

Листинг 7.14

// Продемонстрировать неявно типизированный ступенчатый массив.

using System;

class Jagged

{

static void Main()

{

var jagged = new[] {

new[] { 1, 2, 3, 4 },

new[] { 9, 8, 7 },

new[] { 11, 12, 13, 14, 15 }

};

for(int j = 0; j < jagged.Length; j++) {

for(int i=0; i < jagged[j].Length; i++)

Console.Write(jagged[j][i] + " ");

Console.WriteLine();

}

}

}

Выполнение этой программы дает следующий результат.

2 3 4

9 8 7

12 13 14 15

Обратите особое внимание на объявление массива jagged.

var jagged = new[] {

new [] { 1, 2, 3, 4 },

new [] { 9, 8, 7 },

new [] { 11, 12, 13, 14, 15 }

};

Как видите, оператор new[] используется в этом объявлении двояким образом. Во-первых, этот оператор создает массив массивов. И во-вторых, он создает каждый массив в отдельности, исходя из количества инициализаторов и их типа. Как и следо­вало ожидать, все инициализаторы отдельных массивов должны быть одного и того же типа. Таким образом, к объявлению любого неявно типизированного ступенчатого массива применяется тот же самый общий подход, что и к объявлению обычных сту­пенчатых массивов.

Как упоминалось выше, неявно типизированные массивы чаще всего применяются в LINQ-ориентированных запросах. А в остальных случаях следует использовать явно типизированные массивы.