Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Конспект лекций (C#).pdf
Скачиваний:
864
Добавлен:
27.05.2015
Размер:
2.03 Mб
Скачать

Продолжение таблицы 7.4

Наименование

 

Описание

FindLast

Возвращает последний узел (класса LinkedListNode<T>),

(T value)

имеющий значение value. Если узел не найден, то воз-

 

 

вращается null. Например:

 

 

LinkedList<int> l = new LinkedList<int>();

 

l.AddLast(5);

//

l = {5}

 

l.AddLast(8);

//

l = {5, 8}

 

l.AddLast(9);

//

l = {5, 8, 9}

 

l.AddLast(8);

//

l = {5, 8, 9, 8}

 

LinkedListNode<int> node = l.FindLast(8);

 

// node = 8 (четвёртый узел)

 

node = l.FindLast(6); // node = null

 

 

 

 

7.4.4 Класс Queue<T>

Представляет собой класс очереди, работающей по принципу FIFO («первый пришёл – первый ушёл»). Некоторые члены класса приведены в таблице 7.5.

Таблица 7.5 – Некоторые члены класса Queue<T>

Наименование

 

Описание

Count

Возвращает количество элементов в очереди

Enqueue

Добавляет в конец очереди новый элемент со значением

(T item)

item. Например:

 

 

Queue<int> q = new Queue<int>();

 

q.Enqueue(5);

// q = {5}

 

q.Enqueue(8);

// q = {5, 8} (начало слева)

Dequeue()

Забирает из начала очереди элемент класса T и возвращает

 

его. Если очередь пуста, то при выполнении операции воз-

 

никнет исключение. Например:

 

Queue<int> q = new Queue<int>();

 

q.Enqueue(5);

// q = {5}

 

q.Enqueue(8);

// q = {5, 8} (начало слева)

 

int i = q.Dequeue();

// i = 5, q = {8}

 

 

Peek()

Получает из начала очереди элемент класса T но не забира-

 

ет его из очереди. Если очередь пуста, то при выполнении

 

операции возникнет исключение. Например:

 

Queue<int> q = new Queue<int>();

 

q.Enqueue(5);

// q = {5}

 

q.Enqueue(8);

// q = {5, 8} (начало слева)

 

int i = q.Peek();

// i = 5, q = {5, 8}

 

 

Clear()

Удаляет все элементы из очереди

117

7.4.5 Класс Stack<T>

Представляет собой класс очереди, работающей по принципу LIFO («последний пришёл – первый ушёл»), называемую также стеком. Некоторые члены класса приведены в таблице 7.6.

Таблица 7.6 – Некоторые члены класса Stack<T>

Наименование

 

Описание

Count

Возвращает количество элементов в стеке

Push

Добавляет в вершину стека новый элемент со значением

(T item)

item. Например:

 

 

Stack<int> st = new Stack<int>();

 

st.Push(5);

// st = {5}

 

st.Push(8);

// st = {8, 5} (верх слева)

Pop()

Забирает из вершины стека элемент класса T и возвращает

 

его. Если стек пуст, то при выполнении операции возник-

 

нет исключение. Например:

 

Stack<int> st = new Stack<int>();

 

st.Push(5);

// st = {5}

 

st.Push(8);

// st = {8, 5} (верх слева)

 

int i = st.Pop();

// i = 8, st = {5}

Peek()

Получает из вершины стека элемент класса T но не забира-

 

ет его из стека. Если стек пуст, то при выполнении опера-

 

ции возникнет исключение. Например:

 

Stack<int> st = new Stack<int>();

 

st.Push(5);

// st = {5}

 

st.Push(8);

// st = {8, 5} (верх слева)

 

int i = st.Peek(); // i = 8, st = {8, 5}

 

 

Clear()

Удаляет все элементы из стека

7.4.6 Классы SortedSet<T> и HashSet<T>

Представляют собой множества объектов. Множество может содержать только уникальные объекты.

Отличие между классами заключается в том, что класс SortedSet<T> упорядоченный, а класс HashSet<T> – неупорядоченный, но высокопроизводительный.

Если класс T пользовательский, то в нем должен быть реализован интерфейс IComparable<T>. Также во многих случаях требуется перегрузка метода Equals.

Некоторые члены классов приведены в таблице 7.7.

118

Таблица 7.7 – Некоторые члены классов SortedSet<T> и HashSet<T>1

Наименование

 

Описание

 

Count

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

Max

Возвращает объект класса T,

имеющий максимальное зна-

 

чение. Если множество пустое, то возвращается значение

 

по умолчанию для класса T.

 

 

Min

Возвращает объект класса T,

имеющий минимальное зна-

 

чение. Если множество пустое, то возвращается значение

 

по умолчанию для класса T.

 

 

Add

Добавляет в множество новый элемент со значением item

(T item)

и возвращает результат добавления типа bool (true, если

 

 

добавление произведено, и false в противном случае).

 

Например:

 

 

 

 

SortedSet<int> s = new SortedSet<int>();

 

bool b = s.Add(8);

// b = true,

s = {8}

 

b = s.Add(5);

// b = true,

s = {5, 8}

 

b = s.Add(8);

// b = false, s = {5, 8}

 

 

 

Clear()

Удаляет все элементы из множества

 

Contains

Проверяет, входит ли элемент item во множество. Воз-

(T item)

вращает значение типа bool. Например:

 

 

SortedSet<int> s = new SortedSet<int>();

 

s.Add(5);

 

// s = {5}

 

s.Add(2);

 

// s = {2, 5}

 

s.Add(7);

 

// s = {2, 5, 7}

 

bool b = s.Contains(7);

// b = true

 

b = s.Contains(8);

 

// b = false

 

 

Remove

Удаляет из множества элемент со значением item и воз-

(T item)

вращает результат удаления типа bool (true, если удале-

 

 

ние произведено, и false в противном случае). Например:

 

SortedSet<int> s = new SortedSet<int>();

 

bool b = s.Add(8);

// b = true,

s = {8}

 

b = s.Add(5);

// b = true,

s = {5, 8}

 

b = s.Remove(8);

// b = true,

s = {5}

 

b = s.Remove(9);

// b = false, s = {5}

 

 

 

 

 

1 Примеры приводятся для класса SortedSet<T>

119

Продолжение таблицы 7.7

Наименование

Описание

RemoveWhere

Удаляет из множества элементы, удовлетворяющие усло-

(Predicate<T>

вию match и возвращает количество удалённых элементов.

match)

Требуется реализация метода, проверяющего требуемое

 

 

условие. Например:

 

 

class MyClass : IComparable<MyClass>

 

{

 

 

public int value;

 

 

public MyClass(int NewValue)

 

{ value = NewValue; }

 

public static int V;

 

 

public static bool Upper(MyClass Find)

 

{ return Find.value > V; }

 

public int CompareTo(MyClass other)

 

{ return value - other.value; }

 

}

 

 

SortedSet<MyClass> s = new SortedSet<MyClass>();

 

s.Add(new MyClass(5));

// s = {5}

 

s.Add(new MyClass(2));

// s = {2, 5}

 

s.Add(new MyClass(7));

// s = {2, 5, 7}

 

s.Add(new MyClass(3));

// s = {2, 3, 5, 7}

 

MyClass.V = 4;

 

 

int i = s.RemoveWhere(MyClass.Upper);

 

// i = 2, s = {2, 3}

 

 

i = s.RemoveWhere(MyClass.Upper);

 

// i = 0, s = {2, 3}

 

IntersectWith

Изменяет множество так,

чтобы оно содержало только

(IEnumerable<T>

элементы, входящие в коллекцию other. Например:

other)

 

 

 

SortedSet<int> s1 = new SortedSet<int>();

 

s1.Add(5);

 

 

s1.Add(2);

 

 

s1.Add(7);

 

 

s1.Add(3);

// s1 = {2, 3, 5, 7}

 

SortedSet<int> s2 = new SortedSet<int>();

 

s2.Add(4);

 

 

s2.Add(2);

 

 

s2.Add(7);

// s2 = {2, 4, 7}

 

s1.IntersectWith(s2);

// s1 = {2, 7}

120

Продолжение таблицы 7.7

Наименование

Описание

UnionWith

Изменяет множество так,

чтобы оно содержало элементы,

(IEnumerable<T>

входящие как в множество, так и в коллекцию other.

other)

Например:

 

 

 

 

SortedSet<int> s1 = new SortedSet<int>();

 

s1.Add(5);

 

 

s1.Add(2);

 

 

s1.Add(7);

// s1 = {2, 5, 7}

 

SortedSet<int> s2 = new SortedSet<int>();

 

s2.Add(4);

 

 

s2.Add(9);

 

 

s2.Add(7);

// s2 = {4, 7, 9}

 

s1.UnionWith(s2);

// s1 = {2, 4, 5, 7, 9}

ExceptWith

Изменяет множество так,

чтобы оно содержало элементы,

(IEnumerable<T>

не входящие в коллекцию other. Например:

other)

 

 

 

SortedSet<int> s1 = new SortedSet<int>();

 

s1.Add(5);

 

 

s1.Add(2);

 

 

s1.Add(7);

// s1 = {2, 5, 7}

 

SortedSet<int> s2 = new SortedSet<int>();

 

s2.Add(4);

 

 

s2.Add(7);

// s2 = {4, 7}

 

s1.ExceptWith(s2);

// s1 = {2, 5}

IsSubsetOf

Проверяет, является ли множество подмножеством коллек-

(IEnumerable<T>

ции other. Например:

 

other)

 

 

 

SortedSet<int> s1 = new SortedSet<int>();

 

s1.Add(5);

 

 

s1.Add(2);

// s1 = {2, 5}

 

SortedSet<int> s2 = new SortedSet<int>();

 

s2.Add(2);

 

 

s2.Add(7);

 

 

s2.Add(5);

// s2 = {2, 5, 7}

 

SortedSet<int> s3 = new SortedSet<int>();

 

s2.Add(2);

 

 

s2.Add(7);

 

 

s2.Add(4);

// s3 = {2, 4, 7}

 

bool b = s1.IsSubsetOf(s2); // b = true

 

b = s1.IsSubsetOf(s3);

// b = false

 

 

 

121