КАТЕГОРИИ: Архитектура-(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
Таблица 1.4 - Статические методы класса Array
// Программа 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 напоминает о невозможности использования методов поиска при работе с многомерными массивами. Апаратне і програмне забезпечення Персональної ЕОМ
Дата добавления: 2014-01-03; Просмотров: 321; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |