Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 20:

Консольные приложения в С#

< Лекция 19 || Лекция 20: 1234567891011

Многомерные массивы

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

  • Прямоугольные массивы
  • "Ломаные" (jagged) массивы

Ниже рассмотрим примеры, касающиеся только двумерных массивов.

using System;
  
namespace Test
{
class Test
  {
  static void Main()
  {
  string title =   "*****************************
    ***************\n"
    + "\tДвумерные массивы:\n"
    + "****************************
    ****************\n";
  Console.WriteLine(title);
  
  //*********************************************************      
  // Создаем ссылку типа int на двумерный массив
  // Используются для измерений общие скобки
  int[,] array1; 
  // Запросим память у системы для
  // Для фиксированного количества элементов
  array1 = new int[6,5]; 
  
  Console.WriteLine("Прямоугольный массив [6,5], 
    полученный по\n"
    + "синтаксису массива прямоугольного типа:");
  // Заполним и выведем массив с поэлементной индексацией
  // Метод GetLength() используется для определения
  // количества элементов в указанном измерении массива
  for(int i = 0; i < array1.GetLength(0); i++)
    {
    for(int j = 0; j < array1.GetLength(1); j++)
    {
    array1[i,j] = i * j;
    Console.Write(array1[i,j] + "\t");
    }
    Console.WriteLine();// На новую строку экрана
    }
  
  //*********************************************************      
  // Используются для измерений индивидуальные скобки
  int[][] array2; 
  // Запросим память у системы для
  // Для неопределенного количества элементов
  // по второму измерению
  array2 = new int[6][]; 
  
  Console.WriteLine("\n\nПрямоугольный массив [6][5], 
    полученный по\n"
    + "синтаксису массива ломаного типа:");
  // Вначале запросим память для второго измерения
  // Используются для измерения индивидуальные скобки
  for(int i = 0; i < array2.Length; i++)
           array2[i] = new int[5];
  // Заполним и выведем массив с поэлементной индексацией
  for(int i = 0; i < 6; i++)
  {
    for(int j = 0; j < 5; j++)
    {
    array2[i][j] = i * j;
    Console.Write(array2[i][j] + "\t");
    }
  Console.WriteLine();// На новую строку экрана
  }
  
  //*********************************************************      
  // Используются для измерений индивидуальные скобки
  // Запросим память у системы для
  // Для неопределенного количества элементов
  // по второму измерению
  array2 = new int[6][]; // Используем старую ссылку 
        // массива ломаного типа, старую ссылку
        // массива прямоугольного типа применять нельзя
  
  Console.WriteLine("\n\nМассив ломаного 
    типа [6][]:");
  // Вначале запросим память для второго измерения
  // Используются для измерения индивидуальные скобки
  for(int i = 0; i < array2.Length; i++)
    array2[i] = new int[i + 2];
  // Заполним и выведем массив с поэлементной индексацией
  for(int i = 0; i < array2.Length; i++)
  {
    for(int j = 0; j < array2[i].Length; j++)
    {
      array2[i][j] = i * j;
      Console.Write(array2[i][j] + "\t");
    }
  Console.WriteLine();// На новую строку экрана
  }
      
  while(true);
  }
}
}
Листинг 20.41 . Двумерные массивы

Результат выполнения примера

********************************************
  Двумерные массивы:
******************************************** 
  
Прямоугольный массив [6,5], полученный по
синтаксису массива прямоугольного типа:
0  0  0  0  0
0  1  2  3  4
0  2  4  6  8
0  3  6  9  12
0  4  8  12  16
0  5  10  15  20
  
Прямоугольный массив [6][5], полученный по
синтаксису массива ломаного типа:
0  0  0  0  0
0  1  2  3  4
0  2  4  6  8
0  3  6  9  12
0  4  8  12  16
0  5  10  15  20
  
Массив ломаного типа [6][]:
0  0
0  1  2
0  2  4  6
0  3  6  9  12
0  4  8  12  16  20
0  5  10  15  20  25  30

Базовый класс System.Array

Все массивы в C# являются производными от базового класса System.Array. За счет этого любой массив наследует множество методов и свойств, которые сильно упрощают работу программиста. Методы можно увидеть в суфлере кода IntelliSense, применив его к имени класса или конкретному экземпляру.



Таблица 20.9 . Некоторые члены класса System.Array
Член класса Назначение
BinarySearch() Этот статический метод можно использовать только тогда, когда массив реализует интерфейс ICompare. Если этот интерфейс реализован, то данный метод позволяет найти элемент массива.
Clear() Этот статический метод позволяет очистить указанный диапазон элементов и инициализировать их "безопасными" значениями. Массив целых получит нулевые значения элементов, строковый - пустые строки, ссылки преобретут значения null.
CopyTo() Используется для копирования элементов из исходного массива в массив назначения.
GetEnumerator() Возвращает интерфейс IEnumerator для указанного массива. Этот интерфейс необходим для применения конструкции цикла foreach.
GetLength(), Length Метод GetLength() возвращает количество элементов для заданного в качестве аргумента измерения массива. Нумерация измерений начинается с нуля. Length - это свойство только для чтения, содержащее общее количество элементов массива.
GetLowerBound(), GetUpperBound() Эти методы используются для определения нижней и верхней границ выбранного измерения массива.
GetValue(), SetValue() Возвращает или устанавливает значение элемента по указанному в качестве аргумента индексу. Этот метод перегружен операторами индекса [] для нормальной работы как с одномерными, так и с многомерными массивами.
Reverse() Этот статический метод изменяет порядок следования элементов массива на противоположный.
Sort() Сортирует одномерный массив встроенных типов данных. Если элементы массива поддерживают интерфейс IComparer, то с помощью этого метода можно сортировать и данные пользовательских типов.

Рассмотрим примеры

using System;
  
namespace Test
{
class Test
{
  private void DisplayString(string title, string[] list)
  {
  Console.WriteLine(title);
  for(int i = 0; i < list.Length; i++)
    Console.Write(list[i] + "\t");
  Console.WriteLine(); // Для перевода строки
  }
  
  static void Main()
  {
  // Создадим объект для применения метода DisplayString()
  Test test = new Test();
  
  string title = "********************
    ************************\n"
    + "\tМетоды класса System.Array:\n"
    + "**************************
    ******************\n";
  Console.WriteLine(title);
  
  // Создаем строковый массив
  string[] firstNames = new string[5]
    {
     "Колян",
     "Вован",
     "Иван",
     "Болван",
     "Чурбан"
    };
  
  test.DisplayString("Исходный массив:", firstNames);

  // Расставим элементы в обратном порядке
  // при помощи статического метода System.Array
  Array.Reverse(firstNames);
  test.DisplayString("\nИнверсный массив:
    ", firstNames);
  
  // Сортируем элементы по алфавиту
  // при помощи статического метода System.Array
  Array.Sort(firstNames);
  test.DisplayString("\nСортированный 
    массив:", firstNames);
  
  // Очищаем элементы массива, начиная с имеющего
  // индекс 1 три стоящих подряд
  // при помощи статического метода System.Array
  Array.Clear(firstNames, 1, 3);
  test.DisplayString("\nЧастично очищенный массив:
    ", firstNames);
  
  while(true);
  }
}
}
Листинг 20.42 . Применение методов класса System.Array

Результат выполнения примера

********************************************
  Методы класса System.Array:
******************************************** 
  
Исходный массив:
Колян  Вован  Иван  Болван  Чурбан
  
Инверсный массив:
Чурбан  Болван  Иван  Вован  Колян
  
Сортированный массив:
Болван  Вован  Иван  Колян  Чурбан
  
Частично очищенный массив:
Болван        Чурбан
< Лекция 19 || Лекция 20: 1234567891011
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?