Коллекции

Содержание

Слайд 2

Коллекции Коллекция в языке C# — это объединение произвольного количества объектов,

Коллекции

Коллекция в языке C# — это объединение произвольного количества объектов, возможно,

объектов разного типа.
Коллекция — это динамическая структура данных. Память под коллекцию не фиксируется, данные могут добавляться или удаляться по мере необходимости. Кроме того, для многих видов коллекций возможно включение в коллекцию данных разного типа.
Коллекция — это более гибкая организация данных, чем обычный массив. Но работа с массивом всегда ведётся быстрее, чем с коллекцией.
Для работы с коллекциями используется область имён System.Collections. Наиболее популярными видами коллекций являются:
Слайд 3

Наиболее часто используемые коллекций .NET List (список) Dictionary (словарь) ArrayList (список

Наиболее часто используемые коллекций .NET

List (список)
Dictionary (словарь)
ArrayList (список с разнотипными

элементами)
Hashtable (хэш-таблица)
Stack (стэк)
Queue (очередь)
Слайд 4

Коллекции List (список) Список позволяет связанно хранить однотипные элементы, динамически выделяя

Коллекции

List (список)
Список позволяет связанно хранить однотипные элементы, динамически выделяя память для

последующих элементов. Это значит, что вам не нужно задавать размер списка при его инициализации в отличии от массивов. Доступ к элементу списка возможен по индексу, но обычно элементы списка обрабатываются последовательно.
Слайд 5

Коллекции Dictionary (словарь) Словарь — это подходящая коллекция для хранения и

Коллекции

Dictionary (словарь)
Словарь — это подходящая коллекция для хранения и последующего поиска

однотипных элементов. В словаре элементы хранятся в виде пары «ключ-значение». Это значит, что вы можете сохранить значение, и в дальнейшем используя ключ быстро получить значение из словаря обратно. Тип ключа задается пользователем и может быть любым: числом, строкой или просто объектом.
Слайд 6

Коллекции ArrayList (список с разнотипными элементами) Этот вид списка, в отличие

Коллекции

ArrayList (список с разнотипными элементами)
Этот вид списка, в отличие от List,

позволяет хранить разнотипные элементы. Это означает, что в одном и том же списке могут одновременно храниться  как числа, структуры, так и строки, объекты и null значения. Что делает его значительно более медленным при поиске, чтении и записи элементов, чем его более строго типизированный аналог — List.
Слайд 7

Коллекции Hashtable (хэш-таблица) По принципу работы хэш-таблица схожа с Dictionary, за

Коллекции

Hashtable (хэш-таблица)
По принципу работы хэш-таблица схожа с Dictionary, за тем исключением,

что позволяет одновременно использовать разнотипные ключи и хранить разнотипные элементы. Например для первого элемента хэш-таблицы можно использовать ключ в виде числового значения, а для второго, все той же таблицы, — в виде строки.
Слайд 8

Коллекции Stack (стэк) Стэк — это коллекция для организации хранения элементов

Коллекции

Stack (стэк)
Стэк — это коллекция для организации хранения элементов по модели

LIFO (last-in-first-out), что означает «последний пришел, первый вышел». Коллекция типа стэк незаменима для множества алгоритмов, среди наиболее известных — это алгоритм разбора (парсинга) xml документа.
Слайд 9

Коллекции Queue (очередь) Очередь реализует другую модель добавления и удаления элементов

Коллекции

Queue (очередь)
Очередь реализует другую модель добавления и удаления элементов — FIFO

(first-in-first-out), что означает «первый пришел, первый вышел». Но в отличие от стэка очередь не так популярна, так как ту же функциональность может обеспечить коллекция List c лучшей производительностью. Очередь обычно используется для изящности кода при небольшой размере коллекции.
Слайд 10

Коллекции Коллекции подразделяются на универсальные и неуниверсальные. Универсальные коллекции могут быть

Коллекции

Коллекции подразделяются на универсальные и неуниверсальные. Универсальные коллекции могут быть типизированы

и содержать объекты определенного типа. Это позволяет выигрывать в производительности, особенно, если коллекции хранят типы значений (int, bool, double и т.п.). В неуниверсальных коллекциях происходит упаковка хранимых объектов в тип Object, что требует их последующей распаковки при работе с ними.
Слайд 11

Коллекции Наиболее распространенные и часто используемые коллекции обычно имеют как универсальную

Коллекции

Наиболее распространенные и часто используемые коллекции обычно имеют как универсальную версию,

так и неуниверсальную версию.
Структура данных «список» в C# реализована как универсальная коллекция List, кроме того, есть аналог ArrayList – неуниверсальная коллекция.
Слайд 12

Коллекции ArrayList arr = new ArrayList(); arr.Add(6); arr.Add("5"); Console.WriteLine(int.Parse(arr[0].ToString())); List list

Коллекции

ArrayList arr = new ArrayList(); arr.Add(6); arr.Add("5"); Console.WriteLine(int.Parse(arr[0].ToString()));
List list = newList(); list.Add(123); list.Add("123"); //ошибка! коллекция типизирована Console.WriteLine(list[0]);

Слайд 13

Коллекции Описание коллекции List: List имя=new List (); Пример: List строки=new

Коллекции

Описание коллекции List:
List<тип> имя=new List <тип>();
Пример:
List строки=new List ();
Описание коллекции

ArrayList:
ArrayList имя = new ArrayList();
Пример:
ArrayList объекты=new ArrayList();
Для получения текущего количества элементов в коллекции можно использовать свойство Count.
Слайд 14

Коллекции Главной отличительной особенностью списка Dictionary от списка List заключается в

Коллекции

Главной отличительной особенностью списка Dictionary от списка List заключается в том,

что элементы в Dictionary представлены парой Ключ/значение, где каждому ключу соответствует значение.
В отличие от List, Dictionary получает доступ к элементу по его ключу.
Слайд 15

Коллекции Описание коллекции Dictionary имя=new Dictionary (); Пример: Dictionary ведомость =

Коллекции

Описание коллекции
Dictionary<тип_ключа, тип_значения> имя=new Dictionary<тип_ключа, тип_значения>();
Пример:
Dictionary ведомость = new Dictionary ();
ведомость.Add(«Иванов»,4);
ведомость.Add(«Петров»,5);
ведомость.Add(«Сидоров»,4);

Слайд 16

Методы Коллекций List List и ArrayList Добавление элементов Add(элемент_коллекции); - добавляет

Методы Коллекций List List и ArrayList

Добавление элементов
Add(элемент_коллекции); - добавляет элемент

в коллекцию. В случае универсальной коллекции тип элемента должен совпадать с типом коллекции (пример был приведен выше)
AddRange(Коллекция); - добавляет в текущую коллекцию совокупность элементов заданной коллекции. При этом, коллекция, указанная в качестве параметра, должна реализовывать интерфейс ICollection (стандартный интерфейс коллекции, замечание значимо при использовании пользовательской коллекции).
Insert(место, элемент); - вставляет в заданное место (индекс элемента) заданный элемент
InsertRange(место, коллекция); - вставляет в заданное место в коллекции заданную коллекцию
Слайд 17

Методы Коллекций List List и ArrayList Удаление элементов Remove(элемент); - удаляет

Методы Коллекций List List и ArrayList

Удаление элементов
Remove(элемент); - удаляет элемент из

коллекции (первое вхождение элемента)
RemoveAt(позиция); - удаляет элемент на заданной позиции
RemoveRange(позиция, количество); - удаляет заданное количество элементов, начиная с заданной позиции
Clear(); - удаляет все элементы из коллекции
Слайд 18

Методы Коллекций List List и ArrayList Поиск элементов bool Contains(элемент); -

Методы Коллекций List List и ArrayList

Поиск элементов
bool Contains(элемент); - возвращает,

содержится ли заданный элемент в коллекции
int IndexOf(элемент); - возвращает позицию, на которой содержится в коллекции заданный элемент (первое вхождение)
int IndexOf(элемент, позиция); - возвращает позицию, на которой содержится заданный элемент (первое вхождение). Поиск осуществляется по коллекции, начиная с заданной и заканчивая концом коллекции)
Слайд 19

Методы Коллекций List List и ArrayList Поиск элементов int IndexOf(элемент, стартовая_позиция,

Методы Коллекций List List и ArrayList

Поиск элементов
int IndexOf(элемент, стартовая_позиция, финишная_позиция);

- возвращает позицию, на которой содержится заданный элемент (первое вхождение). Поиск осуществляется по коллекции, начиная с заданной стартовой позиции и заканчивая заданной финишной позицией.
int LastIndexOf(элемент); - возвращает позицию, на которой содержится в коллекции заданный элемент (последнее вхождение). Метод перегружен, его перегруженные версии копируют перегрузки метода IndexOf(), рассмотренного выше
int BinarySearch(элемент); - возвращает позицию, на которой находится заданный элемент в коллекции. По коллекции осуществляется бинарный (двоичный) поиск. Коллекция должная быть отсортирована. Метод содержит несколько перегрузок, можно также задавать компаратор (метод сравнения) для элементов.
Слайд 20

Методы Коллекций List List и ArrayList Дополнительные методы для работы с

Методы Коллекций List List и ArrayList

Дополнительные методы для работы с коллекциями
Sort();

- сортирует коллекцию, используя стандартный компаратор. Если тип элементов коллекции является пользовательским, то компаратор (сравнение элементов) нужно реализовать в соответствующем классе этого типа.
string ToString(); - стандартный метод, переводящий коллекцию в строку
Reverse(); - переворачивает коллекцию, точнее, порядок элементов в коллекции. Первый элемент меняется с последним и т.д.
Reverse(стартовая_позиция, количество_элементов); - переворачивает в коллекции заданное количество элементов, начиная с заданного номера элемента
Слайд 21

Методы Коллекций List List и ArrayList Дополнительные методы для работы с

Методы Коллекций List List и ArrayList

Дополнительные методы для работы с коллекциями
GetRange(стартовая_позиция,

количество элементов); - возвращает коллекцию, элементами которой является заданное количество элементов данной коллекции, начиная с заданной стартовой позиции
GetType(); - возвращает тип элементов коллекции
CopyTo(массив); - копирует элементы коллекции в заданный массив
CopyTo(массив, номер_позиции); - копирует элементы коллекции в заданный массив, начиная с заданной позиции в массиве
CopyTo(массив, номер_позиции, количество_элементов); - копирует заданное количество элементов коллекции в заданный массив, начиная с заданной позиции в массиве
Слайд 22

Методы Коллекций List List и ArrayList Перебор элементов списка Перебрать все

Методы Коллекций List List и ArrayList

Перебор элементов списка
Перебрать все значения списка

можно с помощью операторов foreach:
var list = new List();
  list.Add("Я ");
  list.Add("люблю ");
  list.Add("C#");
  foreach (var item in list) // Перебираем элементы списка
// с помощью foreach.
            { Console.WriteLine(item);
            }
Локальным переменным вместо определенного типа может быть задан неявный "тип" var. Ключевое слово var сообщает компилятору необходимости определения типа переменной из выражения, находящегося с правой стороны оператора инициализации.
Слайд 23

Методы Коллекций List List и ArrayList static void Main(string[] args) {

Методы Коллекций List List и ArrayList

static void Main(string[] args)
{
string

s;
StreamReader readfl;
List st = new List();
if (File.Exists(@"d:\строки.txt"))
readfl = new StreamReader(@"d:\строки.txt");
else
{
Console.WriteLine("Файл не найден");
Console.ReadKey();
return;
}
Слайд 24

Методы Коллекций List List и ArrayList while (readfl.EndOfStream == false) {

Методы Коллекций List List и ArrayList

while (readfl.EndOfStream == false)
{ s

= readfl.ReadLine();
st.Add(s);
}
foreach (var x in st)
Console.WriteLine(x);
Console.WriteLine();
st.Sort();
st.Remove("группа");
foreach (var x in st)
Console.WriteLine(x);
Console.ReadKey();
}
Слайд 25

Методы Коллекций List List и ArrayList

Методы Коллекций List List и ArrayList

Слайд 26

LINQ (Language Integrated Query) - это специальный язык запросов для .NET

LINQ (Language Integrated Query) - это специальный язык запросов для .NET

Framework. Он позволяет выполнять запросы к объектам находящимся в памяти.
Технология LINQ (Language Integrated Query) - это попытка компании Microsoft скрестить традиционное процедурное программирование и декларативное или функциональное программирование. Язык LINQ – это язык структурированных запросов, интегрированный в контекст привычных всем циклов, условных операторов и процедур.

Язык интегрированных запросов LINQ

Слайд 27

Язык интегрированных запросов LINQ LINQ-запрос к коллекции (списку) данных var НоваяКоллекция=from

Язык интегрированных запросов LINQ

LINQ-запрос к коллекции (списку) данных
var НоваяКоллекция=from элемент in

Коллекция
where условие отбора
orderby параметр сортировки
select элемент;
Слайд 28

Язык интегрированных запросов LINQ Пример: var str=from x in st where x.Length>5 orderby x select x

Язык интегрированных запросов LINQ

Пример:
var str=from x in st
where x.Length>5
orderby

x
select x
Слайд 29

Язык интегрированных запросов LINQ Структура: struct person { public string fio;

Язык интегрированных запросов LINQ

Структура:
struct person
{
public string fio;
public DateTime

dat;
public char pol;
}
Коллекция:
List stud = new List();
Запрос:
var dat_sort = from x in stud
orderby x.dat descending
select x;
Слайд 30

Пример: struct person {public string fio; public DateTime dat; public char

Пример:

struct person
{public string fio;
public DateTime dat;
public char

pol;
public double rost;
public int ves;
public bool ekat;
public int vozr() { double m;
DateTime d = DateTime.Now;
TimeSpan p = d - this.dat;
m = p.Days / 365.25;
return Convert.ToInt32(m);
} };
Слайд 31

Пример static void Main(string[] args) { string a; person s; StreamReader

Пример

static void Main(string[] args)
{ string a;
person s;
StreamReader

readfl;
StreamWriter writefl;
List stud = new List();
if (File.Exists(@"d:\структуры.txt"))
readfl = new StreamReader(@"d:\структуры.txt");
else
{ Console.WriteLine("Файл не найден");
Console.ReadKey();
return;
}
Слайд 32

Пример while (readfl.EndOfStream == false) { s.fio = readfl.ReadLine(); s.pol =

Пример

while (readfl.EndOfStream == false)
{
s.fio = readfl.ReadLine();
s.pol =

Convert.ToChar(readfl.ReadLine());
s.dat = Convert.ToDateTime(readfl.ReadLine());
s.rost = Convert.ToDouble(readfl.ReadLine());
s.ves = Convert.ToInt16(readfl.ReadLine());
a = readfl.ReadLine();
if (a == "Да") s.ekat = true; else s.ekat = false;
stud.Add(s);
}