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

программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт


Скачать 3.32 Mb.
НазваниеРуководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Анкорпрограммирование
Дата25.01.2022
Размер3.32 Mb.
Формат файлаrtf
Имя файлаc-40-polnoe-rukovodstvo-2011.rtf
ТипРуководство
#341448
страница89 из 97
1   ...   85   86   87   88   89   90   91   92   ...   97

public void    Add (TKey    key, Добавляет в список пару “ключ‑значение",

TValue value) определяемую параметрами key и value.

Если ключ key уже находится в списке, то его значение не изменяется, и генерируется исключение ArgumentException public bool    ContainsKey (ТК key) Возвращает логическое значение true, если вы

зывающий список содержит объект key в каче‑_стве ключа; а иначе логическое значение false
Метод
Описание
public bool

ContainsValue(TValue value)

public IEnumerator> GetEnumerator() public int IndexOfKey(TKey key)

public int IndexOfValue(TValue value)

public bool Remove(TKey key)

public void RemoveAt(int index) public void TrimExcessO
Возвращает логическое значение true, если вызывающий список содержит значение value ; в противном случае – логическое значение false

Возвращает перечислитель для вызывающего словаря

Возвращает индекс ключа key. Если искомый ключ не обнаружен в списке, возвращается значение ‑1

Возвращает индекс первого вхождения значения value в вызывающем списке. Если искомое значение не обнаружено в списке, возвращается значение ‑1 Удаляет из списка пару “ключ‑значение” по указанному ключу key. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в списке – логическое значение false Удаляет из списка пару “ключ‑значение” по указанному индексу index Сокращает избыточную емкость вызывающей коллекции в виде отсортированного списка
Кроме того, в классе SortedList определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.
Свойство
Описание
public int Capacity { get; set; }
Получает или устанавливает емкость
вызывающей коллекции в виде отсо
ртированного списка
public IComparer Comparer { get;
■ } Получает метод сравнения для вызы
вающего списка
public IList Keys { get; }
Получает коллекцию ключей
public IList Values { get; }
Получает коллекцию значений
И наконец, в классе SortedList
TValue> реализуется приведенный ниже
индексатор, определенный в интерфейсе IDictionaryCTKey, TValueX
public TValue this[TKey key ] { get; set;
} .
Этот индексатор служит для получения и
установки значения элемента коллекции,
а также для добавления в коллекцию нового элемента. Но в данном случае в качестве
индекса служит ключ элемента, а не сам индекс.
В приведенном ниже примере демонстрируется применение класса
SortedList Это еще один измененный вариант представленного
ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа SortedList.

// Продемонстрировать применение класса обобщенной // коллекции SortedList.

using System;

using System.Collections.Generic;

class GenSLDemo {

static void Main() {

// Создать коллекцию в виде отсортированного списка // для хранения имен и фамилий работников и их зарплаты.

SortedList si =

new SortedList();

// Добавить элементы в коллекцию, si.Add("Батлер, Джон", 73000); si.Add("Шварц, Capa", 59000); si.Add("Пайк, Томас", 45000); si.Add("Фрэнк, Эд", 99000);

// Получить коллекцию ключей, т.е. фамилий и имен.

ICollection с = si.Keys;

// Использовать ключи для получения значений, т.е. зарплаты, foreach(string str in с)

Console.WriteLine("{0}, зарплата: {1:C}", str, si[str]);

Console.WriteLine();

}

}

Ниже приведен результат выполнения этой программы.

Батлер, Джон, зарплата: $73,000.00 Пайк, Томас, зарплата: $45,000.00 Фрэнк, Эд, зарплата: $99,000.00 Шварц, Сара, зарплата: $59,000.00

Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника.

Класс Stack

Класс Stack является обобщенным эквивалентом класса необобщенной коллекции Stack. В нем поддерживается стек в виде списка, действующего по принципу "первым пришел – последним обслужен". В этом классе реализуются интерфейсы Collection, IEnumerable и IEnumerable. Кроме того, в классе Stack непосредственно реализуются методы Clear(),Contains() иСоруТоО, определенные в интерфейсе ICollection. А методы Add () и Remove () в этом классе не поддерживаются, как, впрочем, и свойство IsReadOnly. Коллекция класса Stack имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. В классе Stack определяются следующие конструкторы.

public Stack()

public Stack(int capacity)

public Stack(IEnumerable collection)

В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме – пустой стек, первоначальный размер которого определяет параметр capaci ty. И в третьей форме создается стек, содержащий элементы коллекции, определяемой параметром collection. Его первоначальная емкость равна количеству указанных элементов.

В классе Stack определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.20. Как и в классе Stack, эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push (). А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop () . Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек (). А если вызвать метод Pop () или Реек (), когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException.

Таблица 25.20. Методы, определенные в классе Stack
Метод
Описание
public
T Peek()
Возвращает элемент, находящийся на вершине стека, но не удаляет его
public
T Pop()
Возвращает элемент, находящийся на вершине стека, удаляя его в процессе работы
public
void Push(T item)
Помещает элемент i tern в стек
public
T[] ToArrayO
Возвращает массив, содержащий копии элементов вызывающего стека
public
void TrimExcessO
Сокращает избыточную емкость вызывающей коллекции в виде стека
В приведенном ниже примере программы демонстрируется применение класса Stack.

// Продемонстрировать применение класса Stack. using System;

using System.Collections.Generic;

class GenStackDemo { static void Main() {

Stack st = new Stack();

st.Push("один"); st.Push("два"); st.Push("три"); st.Push("четыре"); st.Push("пять");

while(st.Count > 0) { string str = st.Pop();

Console.Write(str + " ");

}

Console.WriteLine ();    '

}

}

При выполнении этой программы получается следующий результат.

пять четыре три два один

Класс Queue

Класс Queue является обобщенным эквивалентом класса необобщенной коллекции Queue. В нем поддерживается очередь в виде списка, действующего по принципу "первым пришел – первым обслужен". В этом классе реализуются интерфейсы ICollection, IEnumerable и IEnumerable. Кроме того, в классе Queue непосредственно реализуются методы Clear () , Contains () и CopyTo (), определенные в интерфейсе ICollection. А методы Add () и Remove () в этом классе не поддерживаются, как, впрочем, и свойство IsReadOnly. Коллекция класса Queue имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны храниться в ней. В классе Queue определяются следующие конструкторы.

public Queue()

public Queue(int capacity)

public Queue(IEnumerable collection)

В первой форме конструктора создается пустая очередь с выбираемой по умолчанию первоначальной емкостью, а во второй форме – пустая очередь, первоначальный размер которой определяет параметр capaci ty. И в третьей форме создается очередь, содержащая элементы коллекции, определяемой параметром collection. Ее первоначальная емкость равна количеству указанных элементов.

В классе Queue определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.21. Как и в классе Queue, эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Enqueue () . Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Dequeue () . Если же требуется извлечь, но йе удалять следующий объект из очереди, то вызывается метод Реек (). А если методы Dequeue () и Реек () вызываются, когда очередь пуста, то генерируется исключение InvalidOperationException.

Таблица 25.21. Методы, определенные в классе Queue

Метод    Описание

public    т Dequeue ()    Возвращает объект из начала вызывающей    очереди.

Возвращаемый объект удаляется из очереди public    void Enqueue (Т item) Добавляет элемент i tern в конец очереди

public    т Реек ()    Возвращает элемент из начала вызывающей очере‑

_ди, но не удаляет его_
Метод
Описание
public virtual Т[] ToArray()

public void TrimExcess()
Возвращает массив, который содержит копии элементов из вызывающей очереди Сокращает избыточную емкость вызывающей коллекции в виде очереди
В приведенном ниже примере демонстрируется применение класса Queue.

// Продемонстрировать применение класса Queue. using System;

using System.Collections.Generic;

class GenQueueDemo { static void Main() {

Queue q = new Queue();

q.Enqueue(98.6); q.Enqueue(212.0); q.Enqueue(32.0); q.Enqueue(3.1416);

double sum = 0.0;

Console.Write("Очередь содержит: "); while(q.Count > 0)    {

double val = q. Dequeue ();

Console.Write(val + " "); sum += val;.

}

Console.WriteLine("ХпИтоговая сумма равна " +• sum);

}

}

Вот к какому результату приводит выполнение этой программы.

Очередь содержит: 98.6 212 32 3.1416 Итоговая сумма равна 345.7416

Класс HashSet

В классе HashSet поддерживается коллекция, реализующая множество. Для хранения элементов этого множества в нем используется хеш‑таблица. В классе HashSet реализуются интерфейсы ICollection, ISet, IEnumerable, IEnumerable, ISerializable, а также IDeserializationCallback. В коллекции типа HashSet реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются. Порядок следования элементов во множестве не указывается. В классе HashSet определяется полный набор операций с множеством, определенных в интерфейсе I$et, включая пересечение, объединение и разноименность. Благодаря этому класс HashSet оказывается идеальным средством для работы с множествами объектов, когда порядок расположения элементов во множестве особого значения не имеет. Коллекция типа

HashSet имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться.

Ниже перечислены наиболее употребительные конструкторы, определенные в классе HashSet.

public ‑HashSetO

public HashSet(IEnumerable collection) public HashSet(IEqualityCompare comparer)

public HashSet(IEnumerable collection, IEqualityCompare comparer)

В первой форме конструктора создается пустое множество, а во второй форме – множество, состоящее из элементов указываемой коллекции collection. В третьей форме конструктора допускается указывать способ сравнения с помощью параметра comparer. А в четвертой форме создается множество, состоящее из элементов указываемой коллекции collection , и используется заданный способ сравнения comparer. Имеется также пятая форма конструктора данного класса, в которой допускается инициализировать множество последовательно упорядоченными данными.

В классе HashSet реализуется интерфейс ISet, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод RemoveWhere () , удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату.

Помимо свойств, определенных в интерфейсах, которые реализуются в классе HashSet, в него введено дополнительное свойство Comparer, приведенное ниже.

public IEqualityComparer Comparer { get; }

Оно позволяет получать метод сравнения для вызывающего хеш‑множества.

Ниже приведен конкретный пример применения класса HashSet.

// Продемонстрировать применение класса HashSet. using System;

using System.Collections.Generic;

class HashSetDemo {

static void Show(string msg, HashSet set) {

Console.Write(msg); foreach(char ch in set)

Console.Write(ch + " ");

Console.WriteLine ();

}

static void Main() {

HashSet setA = new HashSet ();

HashSet setB = new HashSet ();

setA.Add('A'); setA.Add(' В'); setA.Add('C') ;

setB.Add('С') ; setB.Add(' D1 );

setB.Add('Е');

Show("Исходное содержимое множества setA: ", setA);

Show("Исходное содержимое множества setB: ", setB);

setA.SymmetricExceptWith(setB);

Show("Содержимое множества setA после " +

"разноименности со множеством SetB: ", setA);

setA.UnionWith(setB);

Show("Содержимое множества setA после " +

"объединения со множеством SetB: ", setA);

setA.ExceptWith(setB);

Show("Содержимое множества setA после " +

"вычитания из множества setB: ", setA);

Console.WriteLine();

}

}

Ниже приведен результат выполнения программы из данного примера.

Исходное содержимое множества setA: ABC Исходное содержимое множества setB: С D Е

Содержимое множества setA после разноименности со множеством SetB: А В D Е Содержимое множества setA после объединения со множеством SetB: А В D Е С Содержимое множества setA после вычитания из множества setB: А В

Класс SortedSet

Класс SortedSet представляет собой новую разновидность коллекции, введенную в версию 4.0 среды .NET Framework. В нем поддерживается коллекция, реализующая отсортированное множество. В классе SortedSet реализуются интерфейсы ISet, ICollection, ICollection, IEnumerable, IEnumerable, ISerializable, а также IDeserializationCallback. В коллекции типа SortedSet реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются. В классе SortedSet определяется полный набор операций с множеством, определенных в интерфейсе ISet, включая пересечение, объединение и разноименность. Благодаря тому что все элементы коллекции типа SortedSet сохраняются в отсортированном порядке, класс SortedSet оказывается идеальным средством для работы с отсортированными множествами объектов. Коллекция типа SortedSet имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться.
1   ...   85   86   87   88   89   90   91   92   ...   97


написать администратору сайта