Использование оператора foreach 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование оператора foreach



 

В C# также предусмотрен оператор foreach. Этот оператор обеспечивает простой и понятный способ выполнения итерации элементов в массиве. Например, следующий код создает массив numbers и осуществляет его итерацию с помощью оператора foreach:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };

foreach (int i in numbers)

{

Console.Write("{0} ", i);

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* 4 5 6 1 2 3 -2 -1 0

* Для продолжение нажмите любую клавишу...

*/

 

Этот же метод можно использовать для итерации элементов в многомерных массивах, например:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } };

// Или

// int[,] numbers2D = { { 9, 99 }, { 3, 33 }, { 5, 55 } };

foreach (int i in numbers2D)

{

System.Console.Write("{0} ", i);

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* 9 99 3 33 5 55

* Для продолжение нажмите любую клавишу...

*/

 

Однако для лучшего контроля элементов в многомерных массивах можно использовать вложенный цикл for.

Виды массивов

Виды массивов

 

Одномерный массив

 

Можно объявить массив из пяти целых чисел с одним измерением, как показано в следующем примере:

 

int[] array = new int[5];

 

Массив содержит элементы с array[0] по array[4]. Оператор new служит для создания массива и инициализации элементов массива со значениями по умолчанию. В данном примере элементы массива инициализируются значением 0.

 

Массив, в котором хранятся строковые элементы, можно объявить таким же образом. Пример:

 

string[] stringArray = new string[6];

 

Массив можно инициализировать при объявлении. В этом случае спецификация ранга не нужна, поскольку она уже предоставлена по числу элементов в списке инициализации. Пример:

 

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

 

Строковый массив можно инициализировать таким же образом. Ниже приведено объявление строкового массива, в котором каждый элемент инициализируется названием дня:

 

string[] weekDays = new string[] { "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Суб.", "Вск." };

 

При инициализации массива при объявлении можно использовать следующий синтаксис:

 

int[] array1 = { 1, 3, 5, 7, 9 };

string[] weekDays = { "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Суб.", "Вск." };

 

Можно объявить переменную массива без инициализации, но при присвоении массива этой переменной нужно использовать оператор new. Пример:

 

int[] array3;

array3 = new int[] { 1, 3, 5, 7, 9 }; // OK

//array3 = {1, 3, 5, 7, 9}; // Так нельзя

 

Передача одномерных массивов в качестве аргументов

 

Массивы можно передавать в качестве аргументов для параметров методов. Поскольку массивы являются ссылочными типами, метод может изменять значение элементов.

 

Инициализированный одномерный массив можно передать в метод. Например, следующая инструкция передает массив в метод Print:

 

int[] theArray = { 1, 3, 5, 7, 9 };

PrintArray(theArray);

 

В следующем примере кода показана частичная реализация метода Print:

 

void PrintArray(int[] arr)

{

// Код метода

}

 

Инициализацию и передачу нового массива можно выполнить в рамках одного шага, как показано в следующем примере:

 

PrintArray(new int[] { 1, 3, 5, 7, 9 });

 

Массивы типов значений и ссылочных типов

 

Рассмотрим код:

 

SomeType[] array4 = new SomeType[10];

 

Результат этого оператора зависит от того, является ли SomeType типом значения или ссылочным типом. Если это тип значения, оператор создаёт массив из 10 элементов типа SomeType. Если SomeType — ссылочный тип, оператор создаёт массив из 10 элементов, каждый из которых инициализируется нулевой ссылкой.

 

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

 

Массивы могут иметь несколько измерений. Например, следующее объявление создаёт двумерный массив из четырех строк и двух столбцов:

 

int[,] array = new int[4, 2];

 

Следующее объявление создает трехмерный массив с количеством элементов 4, 2 и 3:

 

int[,,] array1 = new int[4, 2, 3];

 

Массив можно инициализировать при объявлении, как показано в следующем примере:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[,] array2D = new int[,] { { 4, 8 }, { 15, 16 }, { 23, 42 }, { 7, 8 } }; // Два элемента (матрица 4 на 2)

int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Явно указанное число элементов (матрица 4 на 2)

string[,] array2Db = new string[3, 2] { { "один", "два" }, { "три", "четыре" }, { "пять", "шесть" } }; // Строковые элементы

int[,,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; // Многомерный массив (матрица 2 на (2 на 3))

int[,,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; // Явно указанное число элементов (матрица 2 на (2 на 3))

// Выводим элементы масивов

Console.WriteLine(array2D[0, 0]);

Console.WriteLine(array2D[0, 1]);

Console.WriteLine(array2D[1, 0]);

Console.WriteLine(array2D[1, 1]);

Console.WriteLine(array2D[3, 0]);

Console.WriteLine(array2Db[1, 0]);

Console.WriteLine(array3Da[1, 0, 1]);

Console.WriteLine(array3D[1, 1, 2]);

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");

Console.ReadKey();

}

}

}

/* Выведет:

* 4

* 2

* 3

* 4

* 7

* три

* 8

* 12

* Для продолжение нажмите любую клавишу...

*/

 

Можно также инициализировать массив, не указывая его размерность:

 

int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

 

Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new, чтобы присвоить массив переменной. В следующем примере показано использование new:

 

int[,] array5;

array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK

//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Ошибка!

 

Следующий пример присваивает значение конкретному элементу массива:

 

array5[2, 1] = 25;

 

Аналогичным образом, в следующем примере получено значение конкретного элемента массива и оно назначено переменной elementValue:

 

int elementValue = array5[2, 1];

 

В следующем примере кода элементы массивов инициализируются значениями по умолчанию (за исключением массивов массивов):

 

int[,] array6 = new int[10, 10];

 

Рассмотрим ещё один пример многомерных массивов:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

// Объявляем двумерный массив

int[,] myArr = new int[4, 5];

Random ran = new Random();

// Инициализируем данный массив

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

myArr[i, j] = ran.Next(1, 15);

Console.Write("{0}\t", myArr[i, j]);

}

Console.WriteLine();

}

Console.WriteLine("Для продолжения нажмите любую клавишу...");

Console.ReadKey();

}

}

}

/* Выведет:

* 13 10 3 7 11

* 7 12 11 11 8

* 13 6 12 13 2

* 13 5 11 6 2

* Для продолжения нажмите любую клавишу...

*/

 

Обратим особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr показано ниже:

 

Рис. 4. 1. Доступ к элементу массива myArr[2,3]

 

Если читателю учебного курса уже приходилось раньше программировать на С, С++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в С# они разделяются запятой.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-28; просмотров: 234; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.45.162 (0.022 с.)