Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Массивы.

И снова здравствуйте. Синтаксис создания массивов в языке 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.
***********


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru