Выбрать главу

static void RectMultidimensionalArray()

{

  Console.WriteLine("=> Rectangular multidimensional array.");

  // Прямоугольный многомерный массив.

  int[,] myMatrix;

  myMatrix = new int[3,4];

  // Заполнить массив (3 * 4).

  for(int i = 0; i < 3; i++)

  {

    for(int j = 0; j < 4; j++)

    {

      myMatrix[i, j] = i * j;

    }

  }

  // Вывести содержимое массива (3 * 4).

  for(int i = 0; i < 3; i++)

  {

    for(int j = 0; j < 4; j++)

    {

      Console.Write(myMatrix[i, j] + "\t");

    }

    Console.WriteLine();

  }

  Console.WriteLine();

}

Второй вид многомерных массивов носит название зубчатого (или ступенчатого) массива. Такой массив содержит какое-то число внутренних массивов, каждый из которых может иметь отличающийся верхний предел. Вот пример:

static void JaggedMultidimensionalArray()

{

  Console.WriteLine("=> Jagged multidimensional array.");

  // Зубчатый многомерный массив (т.е. массив массивов).

  // Здесь мы имеем массив из 5 разных массивов.

  int[][] myJagArray = new int[5][];

  // Создать зубчатый массив.

  for (int i = 0; i < myJagArray.Length; i++)

  {

    myJagArray[i] = new int[i + 7];

  }

  // Вывести все строки (помните, что каждый элемент имеет

  // стандартное значение 0).

  for(int i = 0; i < 5; i++)

  {

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

    {

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

    }

    Console.WriteLine();

  }

  Console.WriteLine();

}

Ниже показан вывод, полученный в результате вызова методов RectMultidimensionalArray() и JaggedMultidimensionalArray():

=> Rectangular multidimensional array:

0       0       0       0

0       1       2       3

0       2       4       6

=> Jagged multidimensional array:

0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0

Использование массивов в качестве аргументов и возвращаемых значений

После создания массив можно передавать как аргумент или получать его в виде возвращаемого значения. Например, приведенный ниже метод PrintArray() принимает входной массив значений int и выводит все его элементы на консоль, а метод GetStringArray() заполняет массив значений string и возвращает его вызывающему коду:

static void PrintArray(int[] myInts)

{

  for(int i = 0; i < myInts.Length; i++)

  {

    Console.WriteLine("Item {0} is {1}", i, myInts[i]);

  }

}

static string[] GetStringArray()

{

  string[] theStrings = {"Hello", "from", "GetStringArray"};

  return theStrings;

}

Указанные методы вызываются вполне ожидаемо:

static void PassAndReceiveArrays()

{

  Console.WriteLine("=> Arrays as params and return values.");

  // Передать массив в качестве параметра.

  int[] ages = {20, 22, 23, 0} ;

  PrintArray(ages);

  // Получить массив как возвращаемое значение.

  string[] strs = GetStringArray();

  foreach(string s in strs)

  {

    Console.WriteLine(s);

  }

  Console.WriteLine();

}

К настоящему моменту вы должны освоить процесс определения, заполнения и исследования содержимого переменной типа массива С#. Для полноты картины давайте проанализируем роль класса System.Array.

Использование базового класса System.Array

Каждый создаваемый массив получает значительную часть своей функциональности от класса System.Array. Общие члены этого класса позволяют работать с массивом, применяя согласованную объектную модель. В табл. 4.1 приведено краткое описание наиболее интересных членов класса System.Array (полное описание всех его членов можно найти в документации).