Герберт Шилдт - C# 4.0 полное руководство - 2011
- Название:C# 4.0 полное руководство - 2011
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0 полное руководство - 2011 краткое содержание
C# 4.0 полное руководство - 2011 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
int[,,] multidim = new int[4, 10, 3];
А в следующем операторе элементу массива multidim с координатами местоположения (2,4,1) присваивается значение 100.
multidim[2, 4, 1] = 100;
Ниже приведен пример программы, в которой сначала организуется трехмерный массив, содержащий матрицу значений 3х3><3, а затем значения элементов этого массива суммируются по одной из диагоналей матрицы.
// Суммировать значения по одной из диагоналей матрицы 3x3x3.
using System;
class ThreeDMatrix { static void Main() {
int[,,] m = new int[3, 3, 3]; int sum = 0; int n = 1;
for(int x=0; x < 3; x++) for (int y=0; у < 3; y++) for(int z=0; z < 3; z++) m[x, y, z] = n++;
sum = m[0, 0, 0] +m[l, 1, 1] +m[2, 2, 2];
Console.WriteLine("Сумма значений по первой диагонали: " + sum);
}
}
Вот какой результат дает выполнение этой программы.
Сумма значений по первой диагонали: 42
Инициализация многомерных массивов
Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера. Ниже в качестве примера приведена общая форма инициализации двумерного массива:
тип[,] имя_мас сив а = {
{val, val, valf ..., val},
{val, val, val, . . ., val},
{val, val, val, . . ., val}
};
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд. Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д. Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.
В качестве примера ниже приведена программа, в которой двумерный массив sqrs инициализируется числами от1 до10 и квадратами этих чисел.
// Инициализировать двумерный массив, using System;
class Squares {
static void Main() {
int[,] sqrs = {
{1 ,1 },
{ 2, 4 Ь {'3, 9 },
{ 4, 16 },
{ 5, 25 },
{ 6, 36 },
{ 7, 49 },
{ 8, 64 },
{ 9, 81 },
{ 10, 100}
};
int i, j;
for(i=0; i < 10; i++) {
for(j =0; j < 2; j++)
Console.Write(sqrs[i,j] + " ");
Console.WriteLine();
}
}
}
При выполнении этой программы получается следующий результат.
Ступенчатые массивы
В приведенных выше примерах применения двумерного массива, по существу, создавался так называемый прямоугольный массив. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в C# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.
Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:
тип[ ] [] имя_ма с сив а = new тип [размер] [];
где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной. Например, в приведенном ниже фрагменте кода объявляется ступенчатый массив j agged. Память сначала распределяется для его первого измерения автоматически, а затем для второго измерения вручную.
int[][] jagged = new int[3][]; jagged[0] = new int [4]; jagged[1] = new int[3]; jagged[2] = new int[5];
После выполнения этого фрагмента кода массив j agged выглядит так, как показано ниже.
Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива j agged, находящемуся на позиции с координатами (2 ,1 ), присваивается значение10 .
j agged[2] [1] = 10;
Обратите внимание на синтаксические отличия в доступе к элементу ступенчатого и прямоугольного массива.
В приведенном ниже примере программы демонстрируется создание двумерного ступенчатого массива.
// Продемонстрировать применение ступенчатых массивов.
using System;
class Jagged {
static void Main() {
int[][] jagged = new int[3][]; jagged[0] = new int[4]; jagged[1] = new int[3]; jagged[2] = new int[5];
int ъ;
// Сохранить значения в первом массиве. for(i=0; i < 4; i++) jagged[0] [i] = i;
// Сохранить значения во втором массиве. for(i=0; i < 3; i++) jagged[1][i] = i;
// Сохранить значения в третьем массиве. for(i=0; i < 5; i++) jagged[2][i] = i;
// Вывести значения из первого массива. for(i=0; i < 4; i++)
Console.Write(jagged[0] [i] + " ") ;
Console.WriteLine();
// Вывести значения из второго массива, for (i=0; i < 3; i++)
Console.Write(jagged[1][i] + " ");
Console.WriteLine() ;
// Вывести значения из третьего массива. for(i=0; i < 5; i++)
Console.Write(jagged[2] [i] + " ") ;
Console.WriteLine() ;
}
}
Выполнение этой программы приводит к следующему результату.
0 12 3
0 12
0 12 3 4
Ступенчатые массивы находят полезное применение не во всех, а лишь в некоторых случаях. Так, если требуется очень длинный двумерный массив, который заполняется не полностью, т.е. такой массив, в котором используются не все, а лишь отдельные его элементы, то для этой цели идеально подходит ступенчатый массив.
И последнее замечание: ступенчатые массивы представляют собой массивы массивов, и поэтому они не обязательно должны состоять из одномерных массивов. Например, в приведенной ниже строке кода создается массив двумерных массивов.
int[] [,] j agged = new int [ 3] [,];
В следующей строке кода элементу массива j agged [ 0 ] присваивается ссылка на массив размерами 4><2.
jagged[0] = new int [4, 2];
А в приведенной ниже строке кода элементу массива j agged [ 0 ] [1,0] присваивается значение переменной i.
Читать дальшеИнтервал:
Закладка: