• Добро пожаловать на сайт - Forumteam.digital !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

9. Проходим массивы.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Массивы.

И снова здравствуйте. Синтаксис создания массивов в языке C# несколько отличается от привычного :) вам синтаксиса языка C++. Надеюсь, вы сидите...

Массив в C# является ссылочным типом (см. предыдущий урок) и является наследником абстрактного класса System.Array. Таким образом, массив имеет собственные методы, поля и свойства (например, свойство Length хранит длину массива). Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же. Базовым индексом массива является 0. Массивы могут одномерными, многомерными или "зубчатыми".

Одномерные массивы
Код:
// создание массива из 10 элементов типа int
// все элементы массива инициализируются нулями
int [] intArray = new int [10];
// создание массива из 10 элементов типа string
// все элементы массива инициализируются null,
// т. к. string - ссылочный тип
string [] stringArray = new string [10];

Инициализация одномерных массивов
Код:
// создание + инициализация
int [] arr1 = new int[] {0, 3, 7, 17, 25};
// создание + инициализация (укороченный вариант)
int [] arr2 = {0, 3, 7, 17, 25};
// Можно объявить массив без инициализации
int [] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new
/*
arr3[0] = 0; // Ошибка
arr3 = {0, 3, 7, 17, 25}; // тоже ошибка
*/
/*
arr3 = new int [] {0, 3, 7, 17, 25}; // правильно
arr3[0] = 10; // правильно
*/

Многомерные массивы
Код:
// создание двумерного массива из 10x10 элементов типа int
// все элементы массива инициализируются нулями
int [,] intArray = new int [10, 10];
// создание трехмерного массива из 10x10x10 элементов типа string
// все элементы массива инициализируются null,
// т. к. string - ссылочный тип
string [,,] stringArray = new string [10, 10, 10];

Инициализация многомерных массивов
Код:
// создание + инициализация массива 3x2
int [,,] arr1 = new int[,] { {0, 3}, {7, 17}, {25, 0} };
// создание + инициализация (укороченный вариант)
int [] arr2 = { {0, 3}, {7, 17}, {25, 0} };
// Можно объявить массив без инициализации
int [,] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new
/*
arr3[0,0] = 0; // Ошибка
arr3 = { {0, 3}, {7, 17}, {25, 0} }; // тоже ошибка
*/
/*
arr3 = new int[,] { {0, 3}, {7, 17}, {25, 0} }; // правильно
arr3[0, 0] = 10; // правильно
*/

"Зубчатые" массивы

Если массива, описанные выше, сходны со статическими (нединамическими) массивами в C++, то "зубчатые" массивы - это ближайший аналог многомерных динамических массивов в C++. "Зубчатый" массив хранит в качестве элементов другие массивы, и каждый из этих массивов может иметь произвольную размерность. То есть "зубчатый" массив может не быть прямоугольным.
Код:
// создание "зубчатого" массива из 3 элементов
int [][] intArray = new int [3][];
for(int i = 0; i < intArray.Length; i++)
   // каждый элемент содержит одномерный массив из 5 элементов
   intArray[i] = new int[5];

// создание "зубчатого" непрямоугольного массива из 3 элементов
int [][] floatArray = new float [3][];
for(int i = 0; i < floatArray.Length; i++)
   // каждый элемент содержит одномерный массив из i + 1 элементов
   floatArray[i] = new float[i + 1];

Инициализация "зубчатых" массивов
Код:
// вариант
int [][] intArray = new int [3][];
intArray[0] = new int[] {1, 2, 3, 4, 5};
intArray[1] = new int[] {3, 4, 5};
intArray[2] = new int[] {1, 2, 3, 4, 5, 6, 7};

// вариант
int[][] myArray = new int [][]
{
   new int[] {1, 2, 3, 4, 5},
   new int[] {3, 4, 5},
   new int[] {1, 2, 3, 4, 5, 6, 7}
};

// укороченный вариант
int[][] myArray =
{
   new int[] {1, 2, 3, 4, 5},
   new int[] {3, 4, 5},
   new int[] {1, 2, 3, 4, 5, 6, 7}
};

// вариант ("зубчатые" и "обычные" массивы можно смешивать)
int [][,] myMixedArray = new int [3][,]
{
   new int[,] { {1, 2}, {3, 4} },
   new int[,] { {5, 6}, {7, 8}, {9, 10} },
   new int[,] { {11, 12} }
};

// Доступ к элементу массива
System.Console.WriteLine(myMixedArray[0][0,0]); // отобразится 1

// Можно объявить массив без инициализации
int [][] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new

***********
при обращению к элементу за пределами массива (по некорректному индексу) генерируется исключение IndexOutOfRangeException.
***********
 
Сверху Снизу