Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 46 47 48 49 50 51 52 53 54 ... 407
Console.WriteLine();

}

Здесь во время прохода по содержимому массива myObjects для каждого элемента выводится лежащий в основе тип, получаемый с помощью метода GetType() класса System.Object, и его значение.

Не вдаваясь пока в детали работы метода System.Object.GetType(), просто отметим, что он может использоваться для получения полностью заданного имени элемента (службы извлечения информации о типах и рефлексии исследуются в главе 17). Приведенный далее вывод является результатом вызова метода ArrayOfObjects():

=> Array of Objects.

Type: System.Int32, Value: 10

Type: System.Boolean, Value: False

Type: System.DateTime, Value: 3/24/1969 12:00:00 AM

Type: System.String, Value: Form & Void

Работа с многомерными массивами

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

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 (полное описание всех его членов можно найти в документации).

Давайте посмотрим на некоторые из членов в действии. Показанный далее вспомогательный метод использует статические методы Reverse() и Clear() для вывода на консоль информации о массиве строковых типов:

static void SystemArrayFunctionality()

{

  Console.WriteLine("=> Working with System.Array.");

  // Инициализировать элементы при запуске.

  string[] gothicBands = {"Tones on Tail", "Bauhaus", "Sisters of Mercy"};

  // Вывести имена в порядке их объявления.

  Console.WriteLine("-> Here is the array:");

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

  {

    // Вывести имя.

    Console.Write(gothicBands[i] + ", ");

  }

  Console.WriteLine("n");

  // Обратить порядок следования элементов...

  Array.Reverse(gothicBands);

  Console.WriteLine("-> The reversed array");

  // ...и вывести их.

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

  {

    // Вывести имя.

    Console.Write(gothicBands[i] + ", ");

  }

  Console.WriteLine("n");

  // Удалить все элементы кроме первого.

  Console.WriteLine("-> Cleared out all

1 ... 46 47 48 49 50 51 52 53 54 ... 407
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен бесплатно.

Оставить комментарий