Курс лекций для студентов специальности i-31 03 04 Информатика всех форм обучения Минск 2010


ТИПЫ ДЛЯ РАБОТЫ С КОЛЛЕКЦИЯМИ-СПИСКАМИ



страница8/29
Дата09.08.2019
Размер0.64 Mb.
#126834
ТипКурс лекций
1   ...   4   5   6   7   8   9   10   11   ...   29

2.10. ТИПЫ ДЛЯ РАБОТЫ С КОЛЛЕКЦИЯМИ-СПИСКАМИ


Рассмотрим типы из базовой библиотеки платформы .NET, применяемые при работе с коллекциями со списковой семантикой.

Класс List из пространства имён System.Collections.Generic  это основной класс для представления наборов, которые допускают динамическое добавление элементов1. Для хранения данных набора используется внутренний массив. Класс List реализует интерфейсы IList и IList. В табл. 8 представлено описание public-элементов класса List.

Таблица 8

Элементы класса List



Элемент

Описание

Добавление и удаление элементов

Add()

Добавление одного элемента

AddRange()

Добавление набора элементов

Insert()

Вставка элемента в заданную позицию

InsertRange()

Вставка набора элементов

Remove()

Удаление элемента

RemoveAt()

Удаление элемента на указанной позиции со сдвигом остальных

RemoveRange()

Удаление диапазона элементов

RemoveAll()

Удаление всех элементов, удовлетворяющих заданному предикату

Индексирование элементов

this[int index]

Основной индексатор

GetRange()

Получение подсписка

GetEnumerator()

Получение перечислителя

Поиск и сортировка

BinarySearch()

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

IndexOf()

Индекс первого вхождения своего аргумента в набор

LastIndexOf()

Индекс последнего вхождения своего аргумента в набор

Contains()

Проверка, содержится ли указанный элемент в наборе

Exists()

Проверка, содержит ли набор элемент, удовлетворяющий заданному предикату

Find()

Возвращает первый элемент, удовлетворяющий предикату, который задан как параметр метода

FindLast()

Возвращает первый элемент с конца набора, удовлетворяющий предикату, который задан как параметр метода

FindAll()

Возвращает все элементы набора, удовлетворяющие предикату

FindIndex()

Возвращает индекс первого вхождения элемента, удовлетворяющего предикату, который задан как параметр метода

FindLastIndex()

Возвращает индекс последнего вхождения элемента, удовлетворяющего предикату, который задан как параметр метода

TrueForAll()

Возвращает true, если заданный предикат верен для всех элементов набора

Sort()

Сортировка набора (возможно, с применением собственного объекта для сравнения элементов)

Экспорт и конвертирование элементов

ToArray()

Преобразование набора в массив

CopyTo()

Копирование набора или его части в массив

AsReadOnly()

Преобразование набора в коллекцию только для чтения

ConvertAll()

Конвертирование набора одно типа в набора другого типа

Другие методы и свойства

Count

Количество элементов в наборе

Capacity

Ёмкость набора

TrimExcess()

Усечение размера внутреннего массива до необходимой минимальной величины

Clear()

Очистка списка  удаление всех элементов

Reverse()

Изменение порядка элементов на противоположный

ForEach()

Выполняет указанное действие для всех элементов списка

Класс List имеет три конструктора. Первый из них  это обычный конструктор без параметров. Второй конструктор позволяет создать набор на основе коллекции – производится копирование элементов коллекции в список. Третий конструктор принимает в качестве параметра начальную ёмкость набора. Ёмкость набора – это количество элементов набора, которое он способен содержать без увеличения размера внутреннего массива.

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

List words = new List { "melon", "avocado" };

words.AddRange(new[] { "banana", "plum" });

words.Insert(0, "lemon");

words.InsertRange(0, new[] { "peach", "nashi" });

words.Remove("melon");

words.RemoveAt(3);

words.RemoveAll(s => s.StartsWith("n"));

List subset = words.GetRange(1, 2);

string[] wordsArray = words.ToArray();

List bigWords = words.ConvertAll(s => s.ToUpper());

List lengths = words.ConvertAll(s => s.Length);

На примере List рассмотрим одну особенность, присущую всем коллекциям. Если в коллекции хранятся структуры, то части структуры нельзя изменить при помощи индексатора коллекции:

public struct Student

{

public string Name { get; set; }



}
var list = new List {new Student {Name = "Ivanov"}};

list[0].Name = "Petrov"; // ошибка компиляции

Класс LinkedList служит для представления двусвязного списка. Такой список позволяет осуществлять вставку и удаление элемента без сдвига остальных элементов. Однако доступ к элементу по индексу требует прохода по списку. LinkedList реализует интерфейсы ICollection и ICollection. Каждый элемент двусвязного списка представлен объектом LinkedListNode.

public sealed class LinkedListNode

{

public LinkedList List { get; }



public LinkedListNode Next { get; }

public LinkedListNode Previous { get; }

public T Value { get; set; }

}

При добавлении элемента можно указать, чтобы он помещался в начало списка, или в конец списка, или относительно существующего в списке элемента. Для этого класс LinkedList содержит специальные методы:



public void AddFirst(LinkedListNode node);

public LinkedListNode AddFirst(T value);


public void AddLast(LinkedListNode node);

public LinkedListNode AddLast(T value);


public void AddAfter(LinkedListNode node, LinkedListNode newNode);

public LinkedListNode AddAfter(LinkedListNode node, T value);


public void AddBefore(LinkedListNode node, LinkedListNode newNode);

public LinkedListNode AddBefore(LinkedListNode node, T value);

Аналогичные методы существуют и для удаления элементов списка:

public void RemoveFirst();

public void RemoveLast();

public bool Remove(T value);

public void Remove(LinkedListNode node);

Класс LinkedList содержит свойства для числа элементов, для указания на первый и последний элемент. Имеются методы для поиска элементов.

Ниже приведён пример использования LinkedList.

var tune = new LinkedList();

tune.AddFirst("do"); // do

tune.AddLast("so"); // do - so

tune.AddAfter(tune.First, "re"); // do - re- so

tune.AddAfter(tune.First.Next, "mi"); // do - re - mi- so

tune.AddBefore(tune.Last, "fa"); // do - re - mi - fa- so

tune.RemoveFirst(); // re - mi - fa - so

tune.RemoveLast(); // re - mi - fa

var miNode = tune.Find("mi");

tune.Remove(miNode); // re - fa

tune.AddFirst(miNode); // mi - re - fa

Классы Queue и Stack реализуют структуры данных «очередь» и «стек» на основе массива1. Конструкторы данных классов, как и конструкторы класса List, позволяют создать объект на основе другой коллекции, а также указать значение для ёмкости (но ёмкость не доступна в виде отдельного свойства). Элементы классов вполне предсказуемы и описаны в табл. 9 и табл. 10.

Таблица 9

Элементы класса Queue


Элемент

Описание

Clear()

Очистка очереди  удаление всех элементов

Contains()

Проверка, содержится ли указанный элемент в очереди

CopyTo()

Копирование очереди в массив

Count

Количество элементов (свойство только для чтения)

Dequeue()

Извлечение элемента из очереди

Enqueue()

Помещение элемента в очередь

GetEnumerator()

Получение перечислителя

Peek()

Чтение очередного элемента без его удаления из очереди

ToArray()

Преобразование очереди в массив

TrimExcess()

Усечение размера внутреннего массива до необходимой минимальной величины

Таблица 10

Элементы класса Stack



Элемент

Описание

Clear()

Очистка стека  удаление всех элементов

Contains()

Проверка, содержится ли указанный элемент в стеке

CopyTo()

Копирование стека в массив

Count

Количество элементов (свойство только для чтения)

GetEnumerator()

Получение перечислителя

Peek()

Чтение очередного элемента без его удаления из стека

Pop()

Извлечение элемента из стека

Push()

Помещение элемента в стек

ToArray()

Преобразование стека в массив

TrimExcess()

Усечение размера внутреннего массива до необходимой минимальной величины

Каталог: images
images -> В списке студентов (или магистрантов)
images -> Н. И. Сулейманов Комплект контрольно-оценочных средств для оценки результатов освоения профессионального модуля разработан на основе Федерального государственного образовательного стандарта среднего профессионального
images -> По направлению подготовки
images -> Добавить гаджеты. Добавление гаджетов
images -> Техническое задание № apnip/C. 2/CS/Ind/01 Международный консультант по улучшенной производительности орошаемого земледелия
images -> Комплект контрольно-оценочных средств по профессиональному модулю пм. 01 Техническое обслуживание и ремонт автотранспорта


Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   ...   29




База данных защищена авторским правом ©vossta.ru 2023
обратиться к администрации

    Главная страница