Слайд 2
![Работа с наборами данных Как хранить и обрабатывать наборы данных? Массивы Коллекции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-1.jpg)
Работа с наборами данных
Как хранить и обрабатывать наборы данных?
Массивы
Коллекции
Слайд 3
![Массивы Ограничивается доступным размером памяти* Размер массива должен быть указан](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-2.jpg)
Массивы
Ограничивается доступным размером памяти*
Размер массива должен быть указан при его создании.
Массивы могут хранить как ссылочные типы, так и типы значений.
Слайд 4
![Массивы Массив является индексированной коллекцией объектов. Одномерный массив объектов объявляется следующим образом. type[] arrayName;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-3.jpg)
Массивы
Массив является индексированной коллекцией объектов.
Одномерный массив объектов объявляется следующим образом.
type[]
arrayName;
Слайд 5
![Многомерный массив Концептуально, многомерный массив с двумя измерениями напоминает сетку](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-4.jpg)
Многомерный массив
Концептуально, многомерный массив с двумя измерениями напоминает сетку (таблицу).
Многомерный
массив с тремя измерениями напоминает куб.
type[,] arrayName;
Слайд 6
![Массив массивов Одним из вариантов многомерного массива является массив массивов.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-5.jpg)
Массив массивов
Одним из вариантов многомерного массива является массив массивов. Массив массивов
представляет собой одномерный массив, в котором каждый элемент является массивом. Элементы массива не обязаны иметь одинаковый размер.
type[][] arrayName;
Слайд 7
![Массив массивов Шаг 1: выделяем память под одномерный массив. int[][]](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-6.jpg)
Массив массивов
Шаг 1: выделяем память под одномерный массив.
int[][] jaggedArray = new
int[3][];
Шаг 2: Для каждого элемента одномерного массива выделяем память под одномерный массив
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
Слайд 8
![Массив объектов Создание массива объектов в отличие от создания массива](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-7.jpg)
Массив объектов
Создание массива объектов в отличие от создания массива простых типов
данных происходит в два этапа.
Сначала необходимо объявить массив.
А затем создать объекты для хранения в нем.
Слайд 9
![Массив объектов Создадим класс class Class1 {int x;} Теперь создадим](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-8.jpg)
Массив объектов
Создадим класс
class Class1 {int x;}
Теперь создадим массив от этого класса
Class1[]
mas = new Class1[10];
for(int i = 0; i < 10; ++i)
{
mas[i] = new Class1();
}
Слайд 10
![Другие коллекции Рассмотрим другие коллекции, часто используемые в программировании: ArrayList List Dictionary Stack Queue](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-9.jpg)
Другие коллекции
Рассмотрим другие коллекции, часто используемые в программировании:
ArrayList
List
Dictionary
Stack
Queue
Слайд 11
![Библиотеки с коллекциями Большая часть классов коллекций содержится в пространствах](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-10.jpg)
Библиотеки с коллекциями
Большая часть классов коллекций содержится в пространствах имен System.Collections,
System.Collections.Generic и System.Collections.Specialized.
Также для обеспечения параллельного выполнения задач и многопоточного доступа применяются классы коллекций из пространства имен System.Collections.Concurrent
Слайд 12
![Основа коллекций Основой для создания всех коллекций является реализация интерфейсов IEnumerator и IEnumerable.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-11.jpg)
Основа коллекций
Основой для создания всех коллекций является реализация интерфейсов IEnumerator и
IEnumerable.
Слайд 13
![IEnumerator Интерфейс IEnumerator представляет перечислитель, с помощью которого становится возможен](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-12.jpg)
IEnumerator
Интерфейс IEnumerator представляет перечислитель, с помощью которого становится возможен последовательный перебор
коллекции, например, в цикле foreach.
Слайд 14
![IEnumerable Интерфейс IEnumerable через свой метод GetEnumerator предоставляет перечислитель всем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-13.jpg)
IEnumerable
Интерфейс IEnumerable через свой метод GetEnumerator предоставляет перечислитель всем классам,
реализующим данный интерфейс.
Поэтому интерфейс IEnumerable (IEnumerable) является базовым для всех коллекций.
Слайд 15
![ArrayList Реализует интерфейс IList с помощью массива с динамическим изменением размера по требованию.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-14.jpg)
ArrayList
Реализует интерфейс IList с помощью массива с динамическим изменением размера по
требованию.
Слайд 16
![Варианты создания](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-15.jpg)
Слайд 17
![Часто используемые свойства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-16.jpg)
Часто используемые свойства
Слайд 18
![Часто используемые методы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-17.jpg)
Часто используемые методы
Слайд 19
![Пример ArrayList array = new ArrayList(); array.Add("Hello"); array.Add('I'); array.Add(1); Console.WriteLine("](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-18.jpg)
Пример
ArrayList array = new ArrayList();
array.Add("Hello");
array.Add('I');
array.Add(1);
Console.WriteLine(" Count: {0}", array.Count);
Console.WriteLine(" Capacity: {0}", array.Capacity);
Console.Write("
Values:");
for(int i = 0; i < array.Count; ++i)
{
Console.Write(" {0}", array[i]);
}
Слайд 20
![List Представляет строго типизированный список объектов, доступных по индексу. Класс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-19.jpg)
List
Представляет строго типизированный список объектов, доступных по индексу.
Класс List является универсальным
эквивалентом класса ArrayList. Он реализует универсальный интерфейс IList с помощью массива, размер которого динамически увеличивается по мере необходимости.
Слайд 21
![Что лучше Делая выбор между классами List и ArrayList, предлагающими](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-20.jpg)
Что лучше
Делая выбор между классами List и ArrayList, предлагающими сходные функциональные
возможности, следует помнить, что класс List в большинстве случаев обрабатывается быстрее и является потокобезопасным. Если в качестве типа T класса List используется ссылочный тип, оба класса действуют идентичным образом.
Слайд 22
![Варианты создания](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-21.jpg)
Слайд 23
![Часто используемые свойства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-22.jpg)
Часто используемые свойства
Слайд 24
![Часто используемые методы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-23.jpg)
Часто используемые методы
Слайд 25
![Пример List List cars = new List (); cars.Add("BMW"); cars.Add("Mersedes");](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-24.jpg)
Пример List
List cars = new List();
cars.Add("BMW");
cars.Add("Mersedes");
cars.Add("Ford Mustang");
cars.Add("Corvette");
cars.Add("Jaguar");
for (int i = 0;
i < cars.Count; ++i)
{
Console.Write(" {0}", cars[i]);
}
Console.ReadKey();
Слайд 26
![Queue Представляет коллекцию объектов, основанную на принципе "первым вошёл —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-25.jpg)
Queue
Представляет коллекцию объектов, основанную на принципе "первым вошёл — первым вышел".
(FIFO)
Добавление элементов происходит в конец списка. Извлечение из начала списка.
Слайд 27
![Варианты создания](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-26.jpg)
Слайд 28
![Часто используемые свойства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-27.jpg)
Часто используемые свойства
Слайд 29
![Часто используемые методы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-28.jpg)
Часто используемые методы
Слайд 30
![Как она реализована Этот класс реализует универсального очередь в виде](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-29.jpg)
Как она реализована
Этот класс реализует универсального очередь в виде циклического массива.
Объекты, хранящиеся в Queue вставляются с одной стороны, и извлекаются с другой.
Слайд 31
![Пример Queue numbers = new Queue (); numbers.Enqueue("one"); numbers.Enqueue("two"); numbers.Enqueue("three");](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-30.jpg)
Пример
Queue numbers = new Queue();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
numbers.Enqueue("four");
numbers.Enqueue("five");
Console.WriteLine(numbers.Peek());
Console.WriteLine(numbers.Dequeue());
Console.WriteLine(numbers.Dequeue());
Console.WriteLine(numbers.Peek());
Console.WriteLine(numbers.Peek());
Слайд 32
![Stack Представляет коллекцию переменного размера экземпляров одинакового заданного типа, обслуживаемую](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-31.jpg)
Stack
Представляет коллекцию переменного размера экземпляров одинакового заданного типа, обслуживаемую по принципу
"последним пришел - первым вышел" (LIFO).
Это означает, что новый элемент вставляется в начало и извлекается из начала.
Слайд 33
![Варианты создания](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-32.jpg)
Слайд 34
![Часто используемые свойства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-33.jpg)
Часто используемые свойства
Слайд 35
![Часто используемые методы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-34.jpg)
Часто используемые методы
Слайд 36
![Пример Stack numbs = new Stack (); numbs.Push("one"); numbs.Push("two"); numbs.Push("three");](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-35.jpg)
Пример
Stack numbs = new Stack();
numbs.Push("one");
numbs.Push("two");
numbs.Push("three");
numbs.Push("four");
numbs.Push("five");
Console.WriteLine(numbs.Peek());
Console.WriteLine(numbs.Pop());
Console.WriteLine(numbs.Pop());
Console.WriteLine(numbs.Peek());
Console.WriteLine(numbs.Peek());
Слайд 37
![Что-когда используется? Очереди и стеки полезны, когда требуется временное хранилище](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-36.jpg)
Что-когда используется?
Очереди и стеки полезны, когда требуется временное хранилище для данных;
Очередь Queue используют, когда необходимо получить доступ к данным в том же порядке, в котором их сохранят.
Стек Stack используют, когда требуется доступ к данным в обратном порядке.
Слайд 38
![Dictionary Ассоциативная коллекция. Представляет собой набор пар ключ-значение.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-37.jpg)
Dictionary
Ассоциативная коллекция. Представляет собой набор пар ключ-значение.
Слайд 39
![Варианты создания (не все!)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-38.jpg)
Варианты создания (не все!)
Слайд 40
![Часто используемые свойства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-39.jpg)
Часто используемые свойства
Слайд 41
![Часто используемые методы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-40.jpg)
Часто используемые методы
Слайд 42
![Словарь Dictionary Универсальный класс предоставляющий сопоставление из набора ключей для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-41.jpg)
Словарь
Dictionary Универсальный класс предоставляющий сопоставление из набора ключей для набора значений.
Каждый ключ в Dictionary должно быть уникальным
Слайд 43
![Пример Dictionary dict = new Dictionary (); dict.Add("txt", "notepad.exe"); dict.Add("bmp",](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-42.jpg)
Пример
Dictionary dict = new Dictionary();
dict.Add("txt", "notepad.exe");
dict.Add("bmp", "paint.exe");
dict.Add("dib", "paint.exe");
dict.Add("rtf", "wordpad.exe");
foreach
(KeyValuePair kvp in dict)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
Слайд 44
![foreach Оператор foreach повторяет группу вложенных операторов для каждого элемента](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-43.jpg)
foreach
Оператор foreach повторяет группу вложенных операторов для каждого элемента массива или
коллекции объектов, реализующих интерфейс System.Collections.IEnumerable или System.Collections.Generic.IEnumerable.
Слайд 45
![foreach foreach( in ) Нельзя использовать, если требуется изменять размер](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-44.jpg)
foreach
foreach(<тип элемента> <имя элемента> in <имя коллекции>)
Нельзя использовать, если требуется изменять
размер коллекции (добавлять или удалять из нее элементы)!
Слайд 46
![Пример foreach (var kvp in dict) { Console.WriteLine("Key = {0},](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-45.jpg)
Пример
foreach (var kvp in dict)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key,
kvp.Value);
}
foreach(var car in cars)
{
Console.Write(" {0}", car);
}
Слайд 47
![Индексаторы Индексаторы позволяют индексировать экземпляры класса или структуры точно так](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-46.jpg)
Индексаторы
Индексаторы позволяют индексировать экземпляры класса или структуры точно так же, как
и массивы.
Индексаторы напоминают свойства за исключением того, что их методы доступа принимают параметры.
Слайд 48
![Пример Создадим класс, в нем массив (нам же нужно будет откуда-то брать элементы) и индексатор](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-47.jpg)
Пример
Создадим класс, в нем массив (нам же нужно будет откуда-то брать
элементы) и индексатор
Слайд 49
![Пример 2 Индексатор может принимать более одного параметра](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-48.jpg)
Пример 2
Индексатор может принимать более одного параметра
Слайд 50
![Как сделать не получится Но реализовать индексатор типа «массив массивов» нельзя](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-49.jpg)
Как сделать не получится
Но реализовать индексатор типа «массив массивов» нельзя
Слайд 51
![Пример Не забудем про конструктор (к слову, зачем он нужен)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-50.jpg)
Пример
Не забудем про конструктор (к слову, зачем он нужен)
Слайд 52
![Как использовать Поработаем с одномерным индексатором](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/7603/slide-51.jpg)
Как использовать
Поработаем с одномерным индексатором