Слайд 2Коллекции
Коллекция в языке C# — это объединение произвольного количества объектов, возможно, объектов
![Коллекции Коллекция в языке C# — это объединение произвольного количества объектов, возможно,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-1.jpg)
разного типа.
Коллекция — это динамическая структура данных. Память под коллекцию не фиксируется, данные могут добавляться или удаляться по мере необходимости. Кроме того, для многих видов коллекций возможно включение в коллекцию данных разного типа.
Коллекция — это более гибкая организация данных, чем обычный массив. Но работа с массивом всегда ведётся быстрее, чем с коллекцией.
Для работы с коллекциями используется область имён System.Collections. Наиболее популярными видами коллекций являются:
Слайд 3Наиболее часто используемые коллекций .NET
List (список)
Dictionary (словарь)
ArrayList (список с разнотипными элементами)
Hashtable
![Наиболее часто используемые коллекций .NET List (список) Dictionary (словарь) ArrayList (список с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-2.jpg)
(хэш-таблица)
Stack (стэк)
Queue (очередь)
Слайд 4Коллекции
List (список)
Список позволяет связанно хранить однотипные элементы, динамически выделяя память для последующих
![Коллекции List (список) Список позволяет связанно хранить однотипные элементы, динамически выделяя память](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-3.jpg)
элементов. Это значит, что вам не нужно задавать размер списка при его инициализации в отличии от массивов. Доступ к элементу списка возможен по индексу, но обычно элементы списка обрабатываются последовательно.
Слайд 5Упражнения
№1 Напишите программу, которая считывает с консоли последовательность положительных целых чисел. Последовательность
![Упражнения №1 Напишите программу, которая считывает с консоли последовательность положительных целых чисел.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-4.jpg)
заканчивается, когда вводится пустая строка. Вычислите и распечатайте сумму и среднее значение последовательности. Сохраните последовательность в List .
№2 Напишите программу, которая считывает с консоли последовательность положительных целых чисел. Последовательность заканчивается, когда вводится пустая строка. Распечатать последовательность, отсортированную по возрастанию
Слайд 6Упражнения
№1 Напишите метод, который находит самую длинную подпоследовательность равных чисел в данном
![Упражнения №1 Напишите метод, который находит самую длинную подпоследовательность равных чисел в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-5.jpg)
List и возвращает результат как новый List . Напишите программу, чтобы проверить, правильно ли работает метод.
№2 Напишите программу, которая удаляет все отрицательные числа из последовательности.
Слайд 7Коллекции
Dictionary (словарь)
Словарь — это подходящая коллекция для хранения и последующего поиска однотипных
![Коллекции Dictionary (словарь) Словарь — это подходящая коллекция для хранения и последующего](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-6.jpg)
элементов. В словаре элементы хранятся в виде пары «ключ-значение». Это значит, что вы можете сохранить значение, и в дальнейшем используя ключ быстро получить значение из словаря обратно. Тип ключа задается пользователем и может быть любым: числом, строкой или просто объектом.
Слайд 8Коллекции
Главной отличительной особенностью списка Dictionary от списка List заключается в том, что
![Коллекции Главной отличительной особенностью списка Dictionary от списка List заключается в том,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-7.jpg)
элементы в Dictionary представлены парой Ключ/значение, где каждому ключу соответствует значение.
В отличие от List, Dictionary получает доступ к элементу по его ключу.
Описание коллекции
Dictionary<тип_ключа, тип_значения> имя=new Dictionary<тип_ключа, тип_значения>();
Пример:
Dictionary ведомость = new Dictionary ();
ведомость.Add(«Иванов»,4);
ведомость.Add(«Петров»,5);
ведомость.Add(«Сидоров»,4);
Слайд 9Упражнения
№1 Напишите программу, которая удаляет из заданной
последовательности все числа, которые встречаются нечетное
количество
![Упражнения №1 Напишите программу, которая удаляет из заданной последовательности все числа, которые](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-8.jpg)
раз.
№2. Напишите программу, которая находит в заданном массиве
целых чисел (в диапазоне [0… 1000]), сколько раз встречается
каждое из них.
Пример: array = {3, 4, 4, 2, 3, 3, 4, 3, 2}
2 -> 2
3->4
Слайд 10Коллекции
ArrayList (список с разнотипными элементами)
Этот вид списка, в отличие от List, позволяет
![Коллекции ArrayList (список с разнотипными элементами) Этот вид списка, в отличие от](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-9.jpg)
хранить разнотипные элементы. Это означает, что в одном и том же списке могут одновременно храниться как числа, структуры, так и строки, объекты и null значения. Что делает его значительно более медленным при поиске, чтении и записи элементов, чем его более строго типизированный аналог — List.
Слайд 11Коллекции
Hashtable (хэш-таблица)
По принципу работы хэш-таблица схожа с Dictionary, за тем исключением, что
![Коллекции Hashtable (хэш-таблица) По принципу работы хэш-таблица схожа с Dictionary, за тем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-10.jpg)
позволяет одновременно использовать разнотипные ключи и хранить разнотипные элементы. Например для первого элемента хэш-таблицы можно использовать ключ в виде числового значения, а для второго, все той же таблицы, — в виде строки.
Слайд 12Коллекции
Stack (стэк)
Стэк — это коллекция для организации хранения элементов по модели LIFO
![Коллекции Stack (стэк) Стэк — это коллекция для организации хранения элементов по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-11.jpg)
(last-in-first-out), что означает «последний пришел, первый вышел». Коллекция типа стэк незаменима для множества алгоритмов, среди наиболее известных — это алгоритм разбора (парсинга) xml документа.
Слайд 13Cтэк
Класс Stack - основные операции
Реализованы все основные операции по работе со
![Cтэк Класс Stack - основные операции Реализованы все основные операции по работе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-12.jpg)
стеком:
- Push (T) - добавляет новый элемент вверху стека
- Pop () - возвращает самый высокий элемент и удаляет его из стека
- Peek () - возвращает самый высокий элемент, не удаляя его
- Count - возвращает количество элементов в стеке
- Clear () - извлекает все элементы из стека
- Содержит (T) - проверить, есть ли в стеке элемент
- ToArray () - возвращает массив, содержащий все элементы стека
Слайд 14Cтэк
Напишите программу, которая считывает с консоли N целых чисел и выводит их
![Cтэк Напишите программу, которая считывает с консоли N целых чисел и выводит](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-13.jpg)
в обратном порядке. Используйте класс Stack .
static void Main()
{
Stack stack = new Stack();
stack.Push("1. John");
stack.Push("2. Nicolas");
stack.Push("3. Mary");
stack.Push("4. George");
Console.WriteLine("Top = " + stack.Peek());
while (stack.Count > 0)
{
string personName = stack.Pop();
Console.WriteLine(personName);
}
}
Слайд 15Cтэк
Напишите программу, которая проверяет, правильно ли помещены круглые скобки в арифметическое выражение.
![Cтэк Напишите программу, которая проверяет, правильно ли помещены круглые скобки в арифметическое](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-14.jpg)
Пример выражения с правильно расставленными скобками: ((a + b) / 5-d). Пример неверного выражения:) (a + b)).
Указание.
Спецификация стека позволяет нам проверить, имеет ли встреченная скобка соответствующая закрывающая скобка. Когда мы встречаем открывающуюся скобку, мы добавляем ее в стек. Когда мы встречаем закрывающую скобку, мы удаляем элемент из стека. Если стек становится пустым до завершения программы в момент, когда нам нужно удалить элемент, скобки ставятся неправильно. То же самое остается, если в конце выражения есть элементы в стеке
Слайд 16Коллекции
Queue (очередь)
Очередь реализует другую модель добавления и удаления элементов — FIFO (first-in-first-out),
![Коллекции Queue (очередь) Очередь реализует другую модель добавления и удаления элементов —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-15.jpg)
что означает «первый пришел, первый вышел». Но в отличие от стэка очередь не так популярна, так как ту же функциональность может обеспечить коллекция List c лучшей производительностью. Очередь обычно используется для изящности кода при небольшой размере коллекции.
Слайд 17Коллекции
static void Main()
{
Queue queue = new Queue();
queue.Enqueue("Message One");
queue.Enqueue("Message Two");
queue.Enqueue("Message Three");
queue.Enqueue("Message Four");
while (queue.Count
![Коллекции static void Main() { Queue queue = new Queue (); queue.Enqueue("Message](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-16.jpg)
> 0)
{
string msg = queue.Dequeue();
Console.WriteLine(msg);
}
}
Слайд 18Коллекции
Коллекции подразделяются на универсальные и неуниверсальные. Универсальные коллекции могут быть типизированы и
![Коллекции Коллекции подразделяются на универсальные и неуниверсальные. Универсальные коллекции могут быть типизированы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-17.jpg)
содержать объекты определенного типа. Это позволяет выигрывать в производительности, особенно, если коллекции хранят типы значений (int, bool, double и т.п.). В неуниверсальных коллекциях происходит упаковка хранимых объектов в тип Object, что требует их последующей распаковки при работе с ними.
Слайд 19Методы Коллекций List и ArrayList
Добавление элементов
Add(элемент_коллекции); - добавляет элемент в коллекцию.
![Методы Коллекций List и ArrayList Добавление элементов Add(элемент_коллекции); - добавляет элемент в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-18.jpg)
В случае универсальной коллекции тип элемента должен совпадать с типом коллекции (пример был приведен выше)
AddRange(Коллекция); - добавляет в текущую коллекцию совокупность элементов заданной коллекции. При этом, коллекция, указанная в качестве параметра, должна реализовывать интерфейс ICollection (стандартный интерфейс коллекции, замечание значимо при использовании пользовательской коллекции).
Insert(место, элемент); - вставляет в заданное место (индекс элемента) заданный элемент
InsertRange(место, коллекция); - вставляет в заданное место в коллекции заданную коллекцию
Слайд 20Методы Коллекций List и ArrayList
Удаление элементов
Remove(элемент); - удаляет элемент из коллекции (первое
![Методы Коллекций List и ArrayList Удаление элементов Remove(элемент); - удаляет элемент из](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-19.jpg)
вхождение элемента)
RemoveAt(позиция); - удаляет элемент на заданной позиции
RemoveRange(позиция, количество); - удаляет заданное количество элементов, начиная с заданной позиции
Clear(); - удаляет все элементы из коллекции
Слайд 21Методы Коллекций List и ArrayList
Поиск элементов
bool Contains(элемент); - возвращает, содержится ли
![Методы Коллекций List и ArrayList Поиск элементов bool Contains(элемент); - возвращает, содержится](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-20.jpg)
заданный элемент в коллекции
int IndexOf(элемент); - возвращает позицию, на которой содержится в коллекции заданный элемент (первое вхождение)
int IndexOf(элемент, позиция); - возвращает позицию, на которой содержится заданный элемент (первое вхождение). Поиск осуществляется по коллекции, начиная с заданной и заканчивая концом коллекции)
Слайд 22Методы Коллекций List и ArrayList
Поиск элементов
int IndexOf(элемент, стартовая_позиция, финишная_позиция); - возвращает
![Методы Коллекций List и ArrayList Поиск элементов int IndexOf(элемент, стартовая_позиция, финишная_позиция); -](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-21.jpg)
позицию, на которой содержится заданный элемент (первое вхождение). Поиск осуществляется по коллекции, начиная с заданной стартовой позиции и заканчивая заданной финишной позицией.
int LastIndexOf(элемент); - возвращает позицию, на которой содержится в коллекции заданный элемент (последнее вхождение). Метод перегружен, его перегруженные версии копируют перегрузки метода IndexOf(), рассмотренного выше
int BinarySearch(элемент); - возвращает позицию, на которой находится заданный элемент в коллекции. По коллекции осуществляется бинарный (двоичный) поиск. Коллекция должная быть отсортирована. Метод содержит несколько перегрузок, можно также задавать компаратор (метод сравнения) для элементов.
Слайд 23Методы Коллекций List и ArrayList
Дополнительные методы для работы с коллекциями
Sort(); - сортирует
![Методы Коллекций List и ArrayList Дополнительные методы для работы с коллекциями Sort();](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-22.jpg)
коллекцию, используя стандартный компаратор. Если тип элементов коллекции является пользовательским, то компаратор (сравнение элементов) нужно реализовать в соответствующем классе этого типа.
string ToString(); - стандартный метод, переводящий коллекцию в строку
Reverse(); - переворачивает коллекцию, точнее, порядок элементов в коллекции. Первый элемент меняется с последним и т.д.
Reverse(стартовая_позиция, количество_элементов); - переворачивает в коллекции заданное количество элементов, начиная с заданного номера элемента
Слайд 24Методы Коллекций List и ArrayList
Дополнительные методы для работы с коллекциями
GetRange(стартовая_позиция, количество элементов);
![Методы Коллекций List и ArrayList Дополнительные методы для работы с коллекциями GetRange(стартовая_позиция,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-23.jpg)
- возвращает коллекцию, элементами которой является заданное количество элементов данной коллекции, начиная с заданной стартовой позиции
GetType(); - возвращает тип элементов коллекции
CopyTo(массив); - копирует элементы коллекции в заданный массив
CopyTo(массив, номер_позиции); - копирует элементы коллекции в заданный массив, начиная с заданной позиции в массиве
CopyTo(массив, номер_позиции, количество_элементов); - копирует заданное количество элементов коллекции в заданный массив, начиная с заданной позиции в массиве
Слайд 25Методы Коллекций List и ArrayList
Перебор элементов списка
Перебрать все значения списка можно с
![Методы Коллекций List и ArrayList Перебор элементов списка Перебрать все значения списка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-24.jpg)
помощью операторов foreach:
var list = new List();
list.Add("Я ");
list.Add("люблю ");
list.Add("C#");
foreach (var item in list) // Перебираем элементы списка
// с помощью foreach.
{ Console.WriteLine(item);
}
Локальным переменным вместо определенного типа может быть задан неявный "тип" var. Ключевое слово var сообщает компилятору необходимости определения типа переменной из выражения, находящегося с правой стороны оператора инициализации.
Слайд 26Методы Коллекций List и ArrayList
static void Main(string[] args)
{
string s;
StreamReader
![Методы Коллекций List и ArrayList static void Main(string[] args) { string s;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/924060/slide-25.jpg)
readfl;
List st = new List();
if (File.Exists(@"d:\строки.txt"))
readfl = new StreamReader(@"d:\строки.txt");
else
{
Console.WriteLine("Файл не найден");
Console.ReadKey();
return;
}