Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Коллекции и контейнеры в языках программирования. Алгоритмы обработки данных в библиотеке STL. Технология LINQ to Object





1. Коллекции и контейнеры в языках программирования.

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

Коллекция позволяет записывать в себя значения и извлекать их. Назначение коллекции — служить хранилищем объектов и обеспечивать доступ к ним. Обычно коллекции используются для хранения групп однотипных объектов, подлежащих стереотипной обработке. Для обращения к конкретному элементу коллекции могут использоваться различные методы, в зависимости от её логической организации. Реализация может допускать выполнение отдельных операций над коллекциями в целом. Наличие операций над коллекциями во многих случаях может существенно упростить программирование.

Контейнеры представляют собой классы, специ­ально предназначенные для упорядоченного хранения данных различных типов. В терминах языка С# такие контейнеры называются наборами данных (collections).

Классы коллекций по своей сути подобны классам стандартной библиотеки шаблонов (Standard Template Library — STL), определенной в С++. То, что в программировании на С++ называется контейнером, в программировании на С# называется коллекцией.

STL. В библиотеке выделяют пять основных компонентов:

· Контейнер (container) — хранение набора объектов в памяти.

· Итератор (iterator) — обеспечение средств доступа к содержимому контейнера.

· Алгоритм (algorithm) — определение вычислительной процедуры.

· Адаптер (adaptor) — адаптация компонентов для обеспечения различного интерфейса.

· Функциональный объект (functor) — сокрытие функции в объекте для использования другими компонентами.

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

Последовательные контейнеры
vector C-подобный динамический массив произвольного доступа с автоматическим изменением размера при добавлении/удалении элемента. Добавление-удаление элемента в конец vector. Быстрый поиск перебором. Существует специализация шаблона vector для типа bool, которая требует меньше памяти за счёт хранения элементов в виде битов, однако она не поддерживает всех возможностей работы с итераторами.
list Двусвязный список, элементы которого хранятся в произвольных кусках памяти, в отличие от контейнера vector, где элементы хранятся в непрерывной области памяти. Поиск перебором медленнее, чем у вектора из-за большего времени доступа к элементу.
deque Дэк. Контейнер похож на vector, но с возможностью быстрой вставки и удаления элементов на обоих концах. Реализован в виде двусвязанного списка линейных массивов. С другой стороны, в отличие от vector, дек не гарантирует расположение всех своих элементов в непрерывном участке памяти, что делает невозможным безопасное использование арифметики указателей для доступа к элементам контейнера.
Ассоциативные контейнеры
set Упорядоченное множество уникальных элементов. При вставке/удалении элементов множества итераторы, указывающие на элементы этого множества, не становятся недействительными. Обеспечивает стандартные операции над множествами типа объединения, пересечения, вычитания.
multiset То же что и set, но позволяет хранить повторяющиеся элементы.
map Упорядоченный ассоциативный массив пар элементов, состоящих из ключей и соответствующих им значений. Ключи должны быть уникальны. Порядок следования элементов определяется ключами.
multimap То же что и map, но позволяет хранить несколько одинаковых ключей.
Контейнеры-адаптеры
stack Стек — контейнер, в котором добавление и удаление элементов осуществляется с одного конца.
queue Очередь — контейнер, с одного конца которого можно добавлять элементы, а с другого — вынимать.
priority_queue Очередь с приоритетом, организованная так, что самый большой элемент всегда стоит на первом месте.

Основные коллекции C# размещены в пространстве имен System.Collections, они являются аналогами контейнеров библиотеки STL (Standard Template Library) C++ и обладают такой же функциональностью. Это устаревшая библиотека, реализованная в версии C# 1.0. Коллекции принимают объекты любого типа, что затрудняет контроль типов данных.

 

2. Алгоритмы обработки данных в библиотеке STL


Стандартная библиотека шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций в C++.

Алгоритмы stl решают типовые задачи, связанные с обработкой последовательности элементов одного типа (т.е. массивы и контейнерные типы). Последовательности определяются итераторами, указывающими на первый элемент и на элемент за последним. Результаты поиска также возвращаются в виде итератора. Если поиск не успешен, то результирующий итератор равен итератору указывающему на элемент за последним.

Библиотека STL предоставляет основные виды алгоритмов:

· Математические (расчёт сумм, произведений, генерация случайных значений)

· Поиска (минимальное значение, поиск последовательности, подсчёт числа значений)

· Сортировки

· Работы с последовательностями (объединение последовательностей, сравнения, обработки последовательности типовой операцией)

 

3. Технология LINQ to Object

Термином "LINQ to Objects" называют использование запросов LINQ с коллекциями, поддерживающими интерфейс IEnumerable или IEnumerable<T> без промежуточных поставщиков LINQ или API-интерфейсов, таких как LINQ to SQL или LINQ to XML. LINQ можно использовать для запроса любых перечислимых коллекций, таких как List<T>, Array или Dictionary<TKey, TValue>. Коллекция может быть определенной пользователем или возвращенной API.NET Framework.

По сути, LINQ to Objects представляет новый подход к коллекциям. Раньше нужно было писать сложные циклы foreach, которые определяли способ извлечения данных из коллекции. При применении подхода LINQ создается декларативный код с описанием необходимых извлекаемых данных.

Кроме того, запросы LINQ имеют три основных преимущества перед традиционными циклами foreach.

· Они более компактные и удобочитаемые, особенно при фильтрации по нескольким условиям.

· Они предоставляют мощные возможности фильтрации, упорядочивания и группировки с минимальным объемом кода приложения.

· Они могут быть перенесены на другие источники данных с минимальными изменениями или без изменений.

 

LINQ предоставляет единую языково-ориентированную модель программирования для работы с данными, независимую от технологии, используемой для хранения этих данных.

Язык интегрированных запросов LINQ (Language Integrated Query) появился в Visual Studio 2008 и.NET Framework версии 3.5, это подсистема языка, предназначена для обработки данных и дополняет C# средствами, позволяющими формировать запросы для любого LINQ-совместимого источника данных. Причем в качестве источника данных могут выступать как коллекции языка C#, так и таблицы баз данных.

Предложения LINQ реализованы при помощи методов расширения, размещенных в пространстве имен System.Linq.

В основу LINQ положено понятие запроса, в котором определяется информация, полученная из источника данных. Выражения запросов составляются в соответствии с декларативным синтаксисом, который позволяет выполнять достаточно сложную фильтрацию, упорядочение и операции группирования при работе с источниками данных, в этом источнике должен быть реализован интерфейс IEnumerable<T>.


Запрос указывает, какую информацию нужно извлечь из источника, способ сортировки, группировки и формирования этих сведений перед возвращением. Запрос хранится в переменной запроса и инициализируется выражением запроса. Важно, что в LINQ сама переменная запроса не предпринимает действий и не возвращает никаких данных, она хранит сведения, необходимые для предоставления результатов при последующем выполнении запроса. Таким образом, запросы LINQ реализуют технологию "ленивого" или отложенного вычисления.

Основные операции запроса:

· Получение источника данных.

from переменная диапазона in источник данных

Обычно для типа возвращаемого значения указывается ключевое слово var, которое сообщает компилятору о необходимости определения типа переменной запроса с помощью просмотра источника данных. Тип переменной диапазона определяется компилятором по типу содержащихся в источнике данных.

· Фильтрация.

where логическое выражение

Предложение where применяет фильтр в виде логического выражения, который приводит к возвращению запросом только тех элементов, для которых выражение является истинным.

· Упорядочение (Сортировка).

orderby элемент [порядок]

Предложение orderby сортирует элементы возвращаемой последовательности в зависимости от метода сравнения по умолчанию. Порядок сортировки по возрастанию или убыванию определяется ключевым словом ascending (по умолчанию) или descending соответственно.

Возможна сортировка по нескольким элементам

orderby элемент А [порядок], элемент В [порядок],...

· Соединение.

Предложение join создает связи между последовательностями, неявно смоделированными в источниках данных.

· Группировка.

group переменная диапазона by ключ

Предложение group позволяет группировать результаты на основе указанного ключа.

· Выбор (Проецирование).

select выражение

Предложение select создает результаты запроса и задает форму или тип возвращаемых элементов. Оператор select может также возвращать результат выполнения операции с переменной диапазона, что называется проецированием.


 







Date: 2016-06-06; view: 2131; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию