Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Модуль №1

Else

Цикл работает в полном соответствии со своим названием - тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в контейнере. Цикл заканчивается, когда полностью перебраны все элементы контейнера.

Foreach(тип идентификатор in контейнер) оператор

Цикл foreach

Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами данных. Его синтаксис:

Серьезным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять контейнер элементами приходится с помощью других операторов цикла.

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

 

/// <summary>

/// Демонстрация цикла foreach. Вычисление суммы,

/// максимального и минимального элементов

/// трехмерного массива, заполненного случайными числами.

/// </summary>

public void SumMinMax()

{

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

Random rnd = new Random();

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

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

for (int k =0; k<10; k++)

arr3d[i,j,k]= rnd.Next(100);

long sum =0; int min=arr3d[0,0,0], max=arr3d[0,0,0];

foreach(int item in arr3d)

{

sum +=item;

if (item > max) max = item;

else if (item < min) min = item;

}

Console.WriteLine("sum = {0}, min = {1}, max = {2}",

sum, min, max);

}//SumMinMax

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

Все классы-массивы являются потомками класса Array из библиотеки FCL (статическом компоненте Framework.Net.) Помимо наследования свойств и методов класса Object и вышеперечисленных интерфейсов, класс Array имеет довольно большое число собственных методов и свойств. Благодаря такому мощному родителю, над массивами определены самые разнообразные операции - копирование, поиск, обращение, сортировка, получение различных характеристик. Массивы можно рассматривать как коллекции и устраивать циклы foreach для перебора всех элементов.

 

Таблица 1.3 - Свойства класса Array

Свойство Родитель Описание
IsFixedSize Интерфейс IList True, если массив статический
Length   Число элементов массива
Rank   Размерность массива

 

Таблица 1.4 - Статические методы класса Array

Метод Описание
BinarySearch() Двоичный поиск.
Clear() Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк.
CopyTo() Копирование части или всего массива в другой массив. Описание и примеры даны в тексте
GetLength() Используется для определения количества элементов в указанном измерении массива
IndexOf() Индекс первого вхождения образца в массив. Описание и примеры даны в тексте
LastIndexOf() Индекс последнего вхождения образца в массив. Описание и примеры даны в тексте
Reverse() Обращение одномерного массива.
Sort() Сортировка одномерного массива встроенных типов данных.
GetValue() SetValue() Возвращает или устанавливает значение указанного индекса для массива.
GetUpperBound() GetLowerBound() Используется для определения нижней или верхней границы выбранного измерения массива.

 

// Программа 1. Применение методов класса Array

public static int Main(string[] args) {

string[]firstNames={"Саша", "Маша", "Олег", "Света", "Игорь"};

Console.WriteLine("Here is the array:");

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t");

Console.WriteLine("\n");

Array.Reverse(firstNames);

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t");

Console.WriteLine("\n");

Console.WriteLine("Cleared out all but one…");

Array.Clear(firstNames,1,4);

for(int i=0; i< firstNames.Length; i++)

Console.WriteLine(firstNames[i]+"\t\n");

return 0;

}

 

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

 

// Программа 2. Применение методов класса Array

public static void PrintAr(string name, Array A) {

Console.WriteLine(name);

switch (A.Rank) {

case 1:

for(int i = 0; i<A.GetLength(0);i++)

Console.Write("\t" + name + "[{0}]={1}", i, A.GetValue(i));

Console.WriteLine();

break;

case 2:

for(int i = 0; i<A.GetLength(0);i++) {

for(int j = 0; j<A.GetLength(1);j++)

Console.Write("\t" + name + "[{0},{1}]={2}", i,j, A.GetValue(i,j));

Console.WriteLine();

}

break;

default: break;

}}

 

Примеры различных операций, доступных при работе с массивами, благодаря наследованию от класса Array:

 

// Программа 3. Применение методов класса Array

public void TestCollection() { //операции над массивами

int nc = 7;

int[] col1 = new int[nc], col2 = new int[nc];

double[] col3 = new double[nc];

int[,] col4 = new int[2,2];

CreateCollection(col1); //заполнение случайными числами

PrintCollection("col1",col1);

CreateCollection(col2);

PrintCollection("col2",col2);

CreateCollection(col3);

PrintCollection("col3",col3);

CreateTwoDimAr(col4);

PrintCollection("col4",col4);

// поиск элемента

int first = Array.IndexOf(col1, 2);

int last = Array.LastIndexOf(col1,2);

if (first == -1)

Console.WriteLine("Нет вхождений 2 в массив col1");

else if (first ==last)

Console.WriteLine("Одно вхождение 2 в массив col1");

Console.WriteLine("Несколько вхождений 2 в массив col1");

//first = Array.IndexOf(col4, 4); только одномерный массив

Array.Reverse(col1);

Console.WriteLine("Обращение массива col1:");

PrintCollection("col1",col1);

//копирование

Array.Copy(col1, col3, col1.Length);

Console.WriteLine(" Массив col3 после копирования массива col1:");

PrintCollection("col3",col3);

Array.Copy(col1,1,col2,1,2);

Console.WriteLine("копирование двух элементов col1 в col2:");

PrintCollection("col1",col1);

PrintCollection("col2",col2);

//быстрая сортировка Хоара

Array.Sort(col1);

Console.WriteLine("Отсортированный массив col1:");

PrintCollection("col1",col1);

first = Array.BinarySearch(col1, 2);

Console.WriteLine("Индекс вхождения 2 в col1: {0}",first);

//Создание экземпляра (массива)

Array my2Dar = Array.CreateInstance(typeof(double), 2,3);

PrintCollection("my2Dar",my2Dar);

//клонирование

my2Dar = (Array)col4.Clone();

Console.WriteLine("Массив my2Dar после клонирования col4:");

PrintCollection("my2Dar",my2Dar);

//копирование CopyTo

col1.CopyTo(col2,0);

Console.WriteLine("Массив col2 после копирования col1:");

PrintCollection("col2",col2);

}

В этой процедуре продемонстрированы вызовы различных статических методов класса Array. Для метода Copy показан вызов двух реализаций этого метода, когда копируется весь массив и часть массива. Закомментированный оператор вызова метода IndexOf напоминает о невозможности использования методов поиска при работе с многомерными массивами.

Апаратне і програмне забезпечення

Персональної ЕОМ

<== предыдущая лекция | следующая лекция ==>
Лекция 3.2 | Заняття №4
Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 321; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.