Массивы

Массив С# - это тип, производный от класса System.Array. Поэтому все массивы С# обладают общим набором членов.

Формальное определение массива выглядит так: массив — это набор элементов, доступ к которым производится с помощью числового индекса. Индексы могут содержать элементы любого встроенного типа данных С#, в том числе могут существовать массивы объектов, интерфейсов и структур. В С# массивы могут быть простыми или многомерными. Массивы объявляются путем помещения квадратных скобок [ ] после указания типа данных для элементов этого массива, например:

// Массив символьных строк с 10 элементами {0, 1... 9}
string[] booksOnCOM;
booksOnCOM = new string[10];

// Массив символьных строк с 2 элементами {0, 1}
string[] booksOnPL1 = new string[2];

// Массив символьных строк из 100 элементов {0, 1... 99}
string[] booksOnDotNet = new string[100];

Как мы видим, в первом варианте на объявление массива нам потребовалось две строки. Однако те же самые действия мы можем сделать и в одной строке (это верно и для любых других объектов С#). Однако в любом случае для создания массива фиксированного размера мы должны использовать ключевое слово new.

Такое объявление массива приведет к ошибке компилятора:

// При определении массива фиксированного размера мы обязаны использовать
// ключевое слово new
int[4] ages = {30, 54, 4, 10); // Ошибка!

Помните, что размер массива задается при его создании, но не объявлении. Если мы объявляем массив фиксированного начального размера, мы обязаны использоватъ ключевое слово new. Но если мы возлагаем обязанность по определению необходимого размера массива на компилятор, можно обойтись и без new:

// Будет автоматически создан массив с 4 элементами. 
// Обратите внимание на отсутствие ключевого слова "new"  
// и на пустые квадратные скобки
int[] ages = {20, 22, 23, 0};

Как и во многих других языках, в С# можно производить заполнение массива, перечисляя элементы последовательно в фигурных скобках, а можно использовать для этой цели числовые индексы. Результат применения обоих вариантов будет совершенно одинаковым:

// Используем последовательное перечисление элементов массива:
string[] firstNames - new string[5] {"Рыжик", "Барсик", "Мурзик", "Васька", "Бублик"};

// Используем числовые индексы:
string[] firstNames = new str1ng[5]:
firstNames[0] - "Рыжик";
firstNames[l] - "Барсик";
firstNames[2] = "Мурзик":
firstNames[3] - "Васька";
firstNames[4] - "Бублик";

В С# элементам массива автоматически присваиваются значения по умолчанию в зависимости от используемого для них типа данных. Например, для массива целых чисел всем элементам будет изначально присвоено значение 0, для массива объектов — значение NULL и т. д.

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

Помимо простых массивов — массивов с одним измерением в С# поддерживаются также две основные разновидности многомерных массивов. Первую разновидность многомерных массивов иногда называют «прямоугольным массивом». Такой тип массива образуется простым сложением нескольких измерений. При этом все строки и столбцы в данном массиве будут одинаковой длины. Объявление и заполнение прямоугольного многомерного массива производится следующим образом:

// Прямоугольный многомерный массив
int[] myMatrix;

myMatrix = new int[6, 6];

// Заполняем массив б на б:
for (int i = 0; i < 6; i++)
    for (int j = 0; j < 6; j++)
        myMatrix[i, j] = i*j;

// Выводим элементы многомерного массива на системную консоль
for (int i = 0 ; i < б; i++)
{
    for (int j = 0; j < 6; j++)
        {
            Console.Write(myMatr1x[i,j] + "\t");
		}
    Console.WriteLine();
}

При этом прямоугольная сущность этого типа многомерного массива видна очень хорошо.

Второй тип многомерного массива можно назвать «ломаным» (jagged). TaKoй массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер. Например:

// "Ломаный" многомерный массив (массив из массивов). В нашей случае - это массив
// из пяти внутренних массивов разного размера
int[][] myJagArray = new int[5][];

// Создаем "ломаный" массив
for (int l = 0; l < myJagArray.Length; l++)
{
    myJagArray[i] = new int[l + 7];
    // Выводии каждую строку на системную консоль (как мы помним, каждому элементу
    // присваивается значение по умолчанию - в нашем случае 0)
    for (int i = 0; i < 5; i++)
    {
        Console.Write("Length of row {0} is {l}:\t". i.myJagArray[i],Length);
        for (int j = 0; j < myJagArray[i].Length; j++)
            Console.Write(myJagArray[i][j] + " ");
    }

Console. WrlteLine();

Теперь, когда мы умеем создавать и заполнять массивы С#, мы можем обратить внимание на главный класс, который является базовым для всех массивов С# — класс System.Array.

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

В С# все массивы являются производными от базового класса System.Array. За счет этого любой массив в С# наследует большое количество полезных методов и свойств, которые сильно упрощают работу программиста. Рассмотрим некоторые члены System.Array в действии. В нашем примере с помощью статических методов Reverse() и Clear(), а также свойства Length производится вывод на системную консоль информации о массиве firstName:

// Создаем несколько массивов символьных строк 
// и экспериментируем с членами System.Array
using System;

class Arrays
{
    public static int Main(string[] args)
    {
        // Массив символьных строк
        string[] firstNames = new string[5]
           {"Рыжик",
            "Васька",
            "Мурзик",
            "Барсик",
            "Бублик"};

		// Выводим имена в соответствии с порядком элементов в массиве
        Console.WriteLine("Это массив:");
        for (int i = 0; i < firstNames.Length; i++)
        {
            Console.Write(firstNames[i] + "  ");
        }

        // Расставляем элементы в обратном порядке 
        // при помощи статического метода Reverse()
        Array.Reverse(firstNames);
        
		// ...и снова выводим имена
        Console.WriteLine("Массив перевернутый:");
        for (int i = 0; i < firstNames.Length; i++)
        Console.Write(firstNames[i] + "  ");

        // А теперь вычищаем всех, кроне Рыжика
        Console.WriteLine("Очистим массив кроме одного кота...");
        Array.Clear(firstNames, 1, 4);
        for (int i = 0; i < firstNames.Length; i++)
        {
            Console.Write(firstNames[i] + "   \n");
        }
        
		return 0;
    }
}
Реклама

Не знаете, как выбрать хорошего специалиста по раскрутке в соц.сетях? Читайте smm.storverk.ru