вторник, 26 июня 2012 г.

C# Работа с массивами

Одно из очень важных в любом языке программирования - работа с массивами. Ни одна обработка данных не пройдёт без этого.

Массив (array) — это коллекция переменных одинакового типа, обращение к которым происходит с использованием общего для всех имени. В C# массивы могут быть одномерными или многомерными, хотя в основном используются одномерные массивы. Массивы представляют собой удобное средство группирования связанных переменных. Например, массив можно использовать для хранения значений максимальных дневных температур за месяц, списка цен на акции или названий книг по программированию из домашней библиотеки.

Массив организует данные таким способом, который позволяет легко ими манипулировать. Например, если у вас есть массив, содержащий дивиденды, выплачиваемые по выбранной группе акций, то, построив цикл опроса всего массива, нетрудно вычислить средний доход от этих акций. Кроме того, организация данных в форме массива позволяет легко их сортировать в нужном направлении.

Одномерные массивы
Одномерный массив — это список связанных переменных. Такие списки широко распространены в программировании. Например, один одномерный массив можно использовать для хранения номеров счетов активных пользователей сети. В другом — можно хранить количество мячей, забитых в турнире бейсбольной командой.

Для объявления одномерного массива используется следующая форма записи.
тип[] имя_массива = new тип[размер];
Рассмотрим пример. При выполнении приведенной ниже инструкции создается int- массив (состоящий из 10 элементов), который связывается со ссылочной переменной массива sample.

int[] sample = new int[10];

Это объявление работает подобно любому объявлению объекта. Переменная sample содержит ссылку на область памяти, выделенную оператором new.

Доступ к отдельному элементу массива осуществляется посредством индекса. Индекс описывает позицию элемента внутри массива. В C# первый элемент массива имеет нулевой индекс. Поскольку массив sample содержит 10 элементов, его индексы изменяются от 0 до 9. Чтобы получить доступ к элементу массива по индексу, достаточно указать нужный номер элемента в квадратных скобках. Так, первым элементом массива sample является sample[0], а последним — sample[9]. Например, следующая программа помещает в массив sample числа от 0 до 9.


        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "";
            int[] sample = new int[10];
            int i;
            for (i = 0; i < 10; i = i + 1)
                sample[i] = i;
            for (i = 0; i < 10; i = i + 1)
                label1.Text += ("sample[" + i + "]: " + sample[i] + "\n");

        }

Инициализация массива
В предыдущей программе значения массиву nums были присвоены вручную, т.е. с помощью десяти отдельных инструкций присваивания. Существует более простой путь достижения той же цели: массивы можно инициализировать в момент их создания. Формат инициализации одномерного массива имеет следующий вид:
тип[] имя_массива = [val1, val2, ..., valN];
Здесь начальные значения, присваиваемые элементам массива, задаются с помощью последовательности val1—valN. Значения присваиваются слева направо, в порядке возрастания индекса элементов массива. C# автоматически выделяет для массива область памяти достаточно большого размера, чтобы хранить заданные значения инициализации (инициализаторы). В этом случае нет необходимости использовать в явном виде оператор new.
Пример:
        private void Form1_Load(object sender, EventArgs e)
        {
            // Вычисление среднего арифметического от
            // множества значений.
            label1.Text = "";
            int[] nums = { 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 };
            int avg = 0;
            for (int i = 0; i < 10; i++)
                avg = avg + nums[i];
            avg = avg / 10;
            label1.Text = ("Среднее: " + avg);

        }

Многомерные массивы
Простейший многомерный массив — двумерный. В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй — столбец.

Чтобы объявить двумерный массив целочисленных значений размером 10x20 с именем table, достаточно записать следующее:


int[,] table = new int[10, 20];

Обратите особое внимание на то, что значения размерностей отделяются запятой. Синтаксис первой части этого объявления
[,]
означает, что создается ссылочная переменная двумерного массива. Для реального выделения памяти для этого массива с помощью оператора new используется более конкретный синтаксис:
int[10, 20]
Тем самым обеспечивается создание массива размером 10x20, причем значения размерностей также отделяются запятой.
Чтобы получить доступ к элементу двумерного массива, необходимо указать оба индекса, разделив их запятой. Например, чтобы присвоить число 10 элементу массива table, позиция которого определяется координатами 3 и 5, можно использовать следующую инструкцию:

table[3, 5] = 10;
Рассмотрим пример программы, которая заполняет двумерный массив числами от 1 до 12, а затем отображает содержимое этого массива. 

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "";
            int t, i;
            int[,] table = new int[3, 4];
            for (t = 0; t < 3; ++t)
            {
                for (i = 0; i < 4; ++i)
                {
                    table[t, i] = (t * 4) + i + 1;
                    label1.Text +=(table[t, i] + " ");
                }

            }
        }

В этом примере элемент массива table[0,0] получит число 1, элемент table[0,1] — число 2, элемент table[0,2] — число 3 и т.д. Значение элемента table[2,3] будет равно 12.

Массивы трёх и более измерений
В C# можно определять массивы трех и более измерений. Вот как объявляется многомерный массив:
тип[, .. ,] имя = new тип[размер1, ..., размерN]; 
Например, с помощью следующего объявления создается трехмерный целочисленный массив размером 4x10x3:

int[, ,] multidim = new int[4, 10, 3];

Чтобы присвоить число 100 элементу массива multidim, занимающему позицию с координатами 2,4,1, используйте такую инструкцию:
multidim[2, 4, 1] = 100;
Использование свойства Length
Свойство Length содержит в себе количество элементов в массиве. Используется часто, пренебрегать не стоит.
Пример работы с данным свойством:

        private void Form1_Load(object sender, EventArgs e)
        {
            int[] nums = new int[10];
            label1.Text = ("Длина массива nums равна " +
                nums.Length);
            // Используем Length для инициализации массива nums.
            for (int i = 0; i < nums.Length; i++)
                nums[i] = i * i;
            // Теперь используем Length для отображения nums.
            label2.Text = ("Содержимое массива nums: ");
            label3.Text = "";

            for (int i = 0; i < nums.Length; i++)
                label3.Text += (nums[i] + " ");
        }

Но лично сам всегда пользуюсь в таких случаях циклом Foreach. Подробнее о циклах можно прочесть тут.

0 коммент.:

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

TROCKII БЛОГ Copyright © 2012 | Template created by Lev Trockii |