SlideShare a Scribd company logo
for Binary Studio Academy
Beseda Dmitriy
skype: dmitriy.b_binary
email: dmitriy.beseda@binary-studio.com
Data Structures and
LINQ
binary-studio.com
С чего все начинается
“В унифицированной системе
типов C# все типы,
предопределенные и
пользовательские, ссылочные
типы и типы значений,
наследуют непосредственно или
косвенно от Object. Переменным
типа object можно назначать
значения любых типов.” (MSDN)
Методы:
- Equals
- Finalize
- GetHashCode
- GetType
- MemberwiseClone
- ReferenceEquals
- ToString
Тип ссылки и значения
Типы по значению
- Целочисленные значения(Int,
byte, char, uint ...)
- Числа с плавающей запятой (float,
double)
- Boolean
- Структуры
- Перечисления (enum)
Ссылочный тип
- class
- interface
- delegate
- dynamic
- Object
- string
Приведение типов
- Неявное
- Явное
- Ковариация
Тип ссылки и значения
Тип по занчению
Указатель на
ссылочный тип
Ссылочный тип
Стек Куча
Тип ссылки и значения
Упаковка - используется для хранения типов значений в куче со сбором мусора.
Распаковка является явным преобразованием из типа object в тип значения или
из типа интерфейса в тип значения, реализующего этот интерфейс.
int i = 123; // a value type
object o = i; // boxing
int j = (int) o; // unboxing
Типы списков
System.Collections:
● ArrayList
● BitArray
● Queue
● SortedList
● Stack
● Hashtable
Недостатки:
- Низкая производительность
- Не безопасный тип данных
System.Collections.Generic:
● List<T>
● LinkedList<T>
● Dictionary<TKey, TValue>
● Queue<T>
● Stack<T>
IEnumerable
● GetEnumerator()
● Cast<TResult>
● OfType<TResult>()
● AsParallel
● AsQueryable
IEnumerator:
● Object Current()
● MoveNext()
● Reset()
Array
- Происходит от System.Array
- IEnumerable, IList, ICollection
- Данные должны быть одного типа
- Размер фиксированый
- Прямой доступ в память
- Массивы могут быть двумерными и более
List<T>
- Строго типизированный
- Динамический размер
- Доступ по Индексу
- Типобезопасный
- Высокая скорость
- Не требует упаковки
Collection<T>
- Удобно использовать когда нужно
реагировать на изменение коллекции
путем переопределения методов
ClearItems, InsertItems, RemoveItems,
SetItems.
- Доступ по индексу.
- Разрешает дублирование.
LinkedList<T>
- Нет индекса. Текущий элемент имеет доступ к
следующему и предыдущему элементам
- Пользователь может удалить узлы и повторно их
вставить — как в тот же самый список, так и в
другой список. В результате в куче не размещается
ни одного дополнительного объекта.
- Более быстрые операции вставки и удаления.
- Нет прямого доступа.
Dicitionary<TKey, TValue>
- Коллекция состоит из ключей и значений
- Ключ менять нельзя
- Быстрый доступ к элементу по ключу
(используется hash-таблица)
- Ключ должен быть уникальным
- Тип ключа может быть числом, строкой,
объектом и т.д.
LINQ
Language INtegrated Query
LINQ Data Sources
LINQ in ADO.NET
LINQ
to XML
LINQ
to Objects
LINQ
to DataSet
LINQ
to Entities
LINQ
to SQL
LINQ
to Nhibernate
LINQ
- Представляет собой многочисленные
расширяющие методы.
- Имеет 2 синтаксиса.
- Может использовать анонимные типы.
- Отложенное выполнение.
LINQ
Выборка с условием list.Where(...)
Проекция list.Select(...), list.SelectMany(...)
Сортировка list.OrderBy(...).ThenBy(...)
Группировка list.GroupBy(...)
Аггрегация list.Aggregate(...), list.Sum(), list.Max(), list.Min(), list.Count()
Конвертация list.ToString(), list.ToList(), list.ToArray()
Приведение типов list.Cast<type>(), list.OfType<type>()
Проверка условия list.Any(...), list.All(...)
Выдление элемента list.Element(...), list.ElementAt(...)
Выбор подмножества list.Distinct(), list.Union(), list.Intersect(), list.Except(...)
Полезные материалы
- LINQPad
- OData to practice
- Understanding LINQ C#
- Resharper

More Related Content

PPTX
Include and extend in Ruby
PPTX
El docente 2.0...UNEFA
PDF
Lesson plan 2 weigum
PDF
8-Week TOEFL Course and Award Certificates; Michigan Test, TOEF and TOIEC res...
PDF
Pet 3 rb 2
PPTX
Xaviermontalvo
PDF
1.16 latihan ms.word
PDF
Home For Sale at 19 WHARF AVE PENSACOLA, FL
Include and extend in Ruby
El docente 2.0...UNEFA
Lesson plan 2 weigum
8-Week TOEFL Course and Award Certificates; Michigan Test, TOEF and TOIEC res...
Pet 3 rb 2
Xaviermontalvo
1.16 latihan ms.word
Home For Sale at 19 WHARF AVE PENSACOLA, FL

Viewers also liked (12)

PPTX
PDF
Mayur Resume
PPTX
Vocabulary (1)
PDF
Accompagnement des collectivités locales à l’ouverture des données publiques ...
PPT
IT consulting presentation By Chad Ostreiche
PDF
la mujersamaritana
PPTX
Ruta Magica Chignahuapan Zacatlan
PDF
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
PPTX
Arreglos de rosas
PPTX
Cobrança a clientes
PPTX
Academy PRO: HTML5 API Introduction
PDF
Lesson plan 8 weigum
Mayur Resume
Vocabulary (1)
Accompagnement des collectivités locales à l’ouverture des données publiques ...
IT consulting presentation By Chad Ostreiche
la mujersamaritana
Ruta Magica Chignahuapan Zacatlan
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
Arreglos de rosas
Cobrança a clientes
Academy PRO: HTML5 API Introduction
Lesson plan 8 weigum
Ad

Similar to Binary Studio Academy 2016. Data structures and LINQ (20)

PDF
C# Desktop. Занятие 05.
PPTX
Collections
PPTX
Java Core. Lecture# 4. Collections.
PDF
Алгоритмы и структуры данных осень 2013 лекция 2
PDF
Абстрактные типы данных. Списки
PDF
C# Desktop. Занятие 13.
PPTX
Power of LINQ
PPTX
C#. От основ к эффективному коду
PDF
AlgoCollections (RUS)
PDF
Алгоритмы и структуры данных весна 2014 лекция 2
PDF
ОПК № 5 – Составные типы данных, списки
PPT
PDF
Абстрактные типы данных, контейнеры и списки
PDF
C++ Базовый. Занятие 06.
PPT
презентация конспекта лекций
PPT
List - списки
PPTX
десант презентация
PDF
Игорь Лабутин «Коллекционируем данные в .NET»
PPT
Net 3.0 & Linq
C# Desktop. Занятие 05.
Collections
Java Core. Lecture# 4. Collections.
Алгоритмы и структуры данных осень 2013 лекция 2
Абстрактные типы данных. Списки
C# Desktop. Занятие 13.
Power of LINQ
C#. От основ к эффективному коду
AlgoCollections (RUS)
Алгоритмы и структуры данных весна 2014 лекция 2
ОПК № 5 – Составные типы данных, списки
Абстрактные типы данных, контейнеры и списки
C++ Базовый. Занятие 06.
презентация конспекта лекций
List - списки
десант презентация
Игорь Лабутин «Коллекционируем данные в .NET»
Net 3.0 & Linq
Ad

More from Binary Studio (20)

PPTX
Academy PRO: D3, part 3
PPTX
Academy PRO: D3, part 1
PPTX
Academy PRO: Cryptography 3
PPTX
Academy PRO: Cryptography 1
PPTX
Academy PRO: Advanced React Ecosystem. MobX
PPTX
Academy PRO: Docker. Part 4
PPTX
Academy PRO: Docker. Part 2
PPTX
Academy PRO: Docker. Part 1
PPTX
Binary Studio Academy 2017: JS team project - Orderly
PPTX
Binary Studio Academy 2017: .NET team project - Unicorn
PPTX
Academy PRO: React native - miscellaneous
PPTX
Academy PRO: React native - publish
PPTX
Academy PRO: React native - navigation
PPTX
Academy PRO: React native - building first scenes
PPTX
Academy PRO: React Native - introduction
PPTX
Academy PRO: Push notifications. Denis Beketsky
PPTX
Academy PRO: Docker. Lecture 4
PPTX
Academy PRO: Docker. Lecture 3
PPTX
Academy PRO: Docker. Lecture 2
PPTX
Academy PRO: Docker. Lecture 1
Academy PRO: D3, part 3
Academy PRO: D3, part 1
Academy PRO: Cryptography 3
Academy PRO: Cryptography 1
Academy PRO: Advanced React Ecosystem. MobX
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 1
Binary Studio Academy 2017: JS team project - Orderly
Binary Studio Academy 2017: .NET team project - Unicorn
Academy PRO: React native - miscellaneous
Academy PRO: React native - publish
Academy PRO: React native - navigation
Academy PRO: React native - building first scenes
Academy PRO: React Native - introduction
Academy PRO: Push notifications. Denis Beketsky
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 1

Binary Studio Academy 2016. Data structures and LINQ

  • 1. for Binary Studio Academy Beseda Dmitriy skype: dmitriy.b_binary email: dmitriy.beseda@binary-studio.com Data Structures and LINQ binary-studio.com
  • 2. С чего все начинается “В унифицированной системе типов C# все типы, предопределенные и пользовательские, ссылочные типы и типы значений, наследуют непосредственно или косвенно от Object. Переменным типа object можно назначать значения любых типов.” (MSDN) Методы: - Equals - Finalize - GetHashCode - GetType - MemberwiseClone - ReferenceEquals - ToString
  • 3. Тип ссылки и значения Типы по значению - Целочисленные значения(Int, byte, char, uint ...) - Числа с плавающей запятой (float, double) - Boolean - Структуры - Перечисления (enum) Ссылочный тип - class - interface - delegate - dynamic - Object - string
  • 4. Приведение типов - Неявное - Явное - Ковариация
  • 5. Тип ссылки и значения Тип по занчению Указатель на ссылочный тип Ссылочный тип Стек Куча
  • 6. Тип ссылки и значения Упаковка - используется для хранения типов значений в куче со сбором мусора. Распаковка является явным преобразованием из типа object в тип значения или из типа интерфейса в тип значения, реализующего этот интерфейс. int i = 123; // a value type object o = i; // boxing int j = (int) o; // unboxing
  • 7. Типы списков System.Collections: ● ArrayList ● BitArray ● Queue ● SortedList ● Stack ● Hashtable Недостатки: - Низкая производительность - Не безопасный тип данных System.Collections.Generic: ● List<T> ● LinkedList<T> ● Dictionary<TKey, TValue> ● Queue<T> ● Stack<T>
  • 8. IEnumerable ● GetEnumerator() ● Cast<TResult> ● OfType<TResult>() ● AsParallel ● AsQueryable IEnumerator: ● Object Current() ● MoveNext() ● Reset()
  • 9. Array - Происходит от System.Array - IEnumerable, IList, ICollection - Данные должны быть одного типа - Размер фиксированый - Прямой доступ в память - Массивы могут быть двумерными и более
  • 10. List<T> - Строго типизированный - Динамический размер - Доступ по Индексу - Типобезопасный - Высокая скорость - Не требует упаковки
  • 11. Collection<T> - Удобно использовать когда нужно реагировать на изменение коллекции путем переопределения методов ClearItems, InsertItems, RemoveItems, SetItems. - Доступ по индексу. - Разрешает дублирование.
  • 12. LinkedList<T> - Нет индекса. Текущий элемент имеет доступ к следующему и предыдущему элементам - Пользователь может удалить узлы и повторно их вставить — как в тот же самый список, так и в другой список. В результате в куче не размещается ни одного дополнительного объекта. - Более быстрые операции вставки и удаления. - Нет прямого доступа.
  • 13. Dicitionary<TKey, TValue> - Коллекция состоит из ключей и значений - Ключ менять нельзя - Быстрый доступ к элементу по ключу (используется hash-таблица) - Ключ должен быть уникальным - Тип ключа может быть числом, строкой, объектом и т.д.
  • 14. LINQ Language INtegrated Query LINQ Data Sources LINQ in ADO.NET LINQ to XML LINQ to Objects LINQ to DataSet LINQ to Entities LINQ to SQL LINQ to Nhibernate
  • 15. LINQ - Представляет собой многочисленные расширяющие методы. - Имеет 2 синтаксиса. - Может использовать анонимные типы. - Отложенное выполнение.
  • 16. LINQ Выборка с условием list.Where(...) Проекция list.Select(...), list.SelectMany(...) Сортировка list.OrderBy(...).ThenBy(...) Группировка list.GroupBy(...) Аггрегация list.Aggregate(...), list.Sum(), list.Max(), list.Min(), list.Count() Конвертация list.ToString(), list.ToList(), list.ToArray() Приведение типов list.Cast<type>(), list.OfType<type>() Проверка условия list.Any(...), list.All(...) Выдление элемента list.Element(...), list.ElementAt(...) Выбор подмножества list.Distinct(), list.Union(), list.Intersect(), list.Except(...)
  • 17. Полезные материалы - LINQPad - OData to practice - Understanding LINQ C# - Resharper

Editor's Notes

  • #5: Ковариантность для массивов позволяет неявно преобразовывать массив производного типа большей глубины наследования в массив производного типа меньшей глубины наследования. Однако такая операция не является типобезопасной
  • #7: Упаковка - используется для хранения типов значений в куче со сбором мусора. Упаковка представляет собой неявное преобразование типа значения в тип object или в любой другой тип интерфейса, реализуемый этим типом значения. При упаковке типа значения в куче выделяется экземпляр объекта и выполняется копирование значения в этот новый объект. Распаковка является явным преобразованием из типа object в тип значения или из типа интерфейса в тип значения, реализующего этот интерфейс. Операция распаковки состоит из следующих действий: проверка экземпляра объекта на то, что он является упакованным значением заданного типа значения; копирование значения из экземпляра в переменную типа значения.