Создать словарь для хранения имен и фамилий



Работников и их зарплаты.

SortedDictionary<string, double> diet =

new SortedDictionary<string, double>();

 

Добавить элементы в коллекцию,

diet.Add("Батлер, Джон", 73000);

diet.Add("Шварц, Capa", 59000);

diet.Add("Пайк, Томас", 45000);

diet.Add("Фрэнк, Эд", 99000);

 

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

ICollection<string> с = diet.Keys;

 

Использовать ключи для получения значений, т.е. зарплаты,

Foreach(string str in с)

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

}

}

 

Эта программа дает следующий результат.

 

Батлер, Джон, зарплата: $73,000.00

Пайк, Томас, зарплата: $45,000.00

Фрэнк, Эд, зарплата: $99,000.00

Шварц, Сара, зарплата: $59,000.00

 

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

 

 

Класс SortedList<TKey, TValue>

 

В коллекции класса SortedList<TKey, TValue> хранится отсортированный список пар "ключ-значение". Это обобщенный эквивалент класса необобщенной коллекции SortedList. В классе SortedList<TKey, TValue> реализуются интерфейсы IDictionary, IDictionary<TKey, TValue>, ICollection, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable и IEnumerable<KeyValuePair<TKey, TValue>>. Размер коллекции типа SortedList<TKey, TValue> изменяется динамически, автоматически увеличиваясь по мере необходимости. Класс SortedList<TKey, TValue> подобен классу SortedDictionary<TKey, TValue>, но у него другие рабочие характеристики. В частности, класс SortedList<TKey, TValue> использует меньше памяти, тогда как класс SortedDictionary<TKey, TValue> позволяет быстрее вставлять неупорядоченные элементы в коллекцию.

В классе SortedListcTKey, TValue> предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого класса.

 

Public SortedList()

public SortedList(IDictionaryCTKey, TValue> dictionary)

Public SortedList(int capacity)

public SortedList(IComparer<TK> comparer)

 

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

Емкость коллекции типа SortedList<TKey, TValue> увеличивается автоматически по мере необходимости, когда в список добавляются новые элементы. Если текущая емкость коллекции превышается, то она увеличивается. Преимущество указания емкости коллекции типа SortedList<TKey, TValue> при ее создании заключается в снижении или полном исключении издержек на изменение размера коллекции. Разумеется, указывать емкость коллекции целесообразно лишь в том случае, если заранее известно, сколько элементов требуется хранить в ней.

В классе SortedList<TKey, TValue> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.19. Следует иметь в виду, что перечислитель, возвращаемый методом GetEnumerator(), служит для перечисления пар "ключ-значение", хранящихся в отсортированном списке в виде объектов типа KeyValuePair.

 

Таблица 25.19. Наиболее часто используемые методы, определенные в классе SortedListCTKey, TValue>

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

 

public void Add (TKey key, TValue value) - Добавляет в список пару “ключ-значение", определяемую параметрами key и value.  Если ключ key уже находится в списке, то его значение не изменяется, и генерируется исключение ArgumentException  

public bool ContainsKey (ТК key) Возвращает логическое значение true, если вызывающий список содержит объект key в каче-_стве ключа; а иначе логическое значение false

 

public bool ContainsValue(TValue value) -  Возвращает логическое значение true, если вызывающий список содержит значение value ; в противном случае — логическое значение false

public IEnumerator<KeyValuePair CTKey, TValue>> GetEnumerator()  -  Возвращает перечислитель для вызывающего словаря

public int IndexOfKey(TKey key) -  Возвращает индекс ключа key. Если искомый ключ не обнаружен в списке, возвращается значение -1

public int IndexOfValue(TValue value) -  Возвращает индекс первого вхождения значения value в вызывающем списке. Если искомое значение не обнаружено в списке, возвращается значение -1

public bool Remove(TKey key) -  Удаляет из списка пару “ключ-значение” по указанному ключу key. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в списке — логическое значение false

public void RemoveAt(int index) - Удаляет из списка пару “ключ-значение” по указанному индексу index

public void TrimExcess() - Сокращает избыточную емкость вызывающей коллекции в виде отсортированного списка

 

Кроме того, в классе SortedList<TK, TV> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.

 

Свойство - Описание

 

public int Capacity { get; set; } -  Получает или устанавливает емкость вызывающей коллекции в виде отсортированного списка

public IComparer<TK> Comparer { get; } - Получает метод сравнения для вызывающего списка

public IList<TK> Keys { get; } -  Получает коллекцию ключей

public IList<TV> Values { get; } -  Получает коллекцию значений

 

И наконец, в классе SortedList<TKey, TValue> реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionaryCTKey, TValue>

 

public TValue this[TKey key] { get; set; }

 

Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс.

В приведенном ниже примере демонстрируется применение класса SortedList<TKey, TValue> Это еще один измененный вариант представленного ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа SortedList.

 

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

// коллекции SortedList<TKey, TValue>.

using System;

using System.Collections.Generic;

 

class GenSLDemo {

static void Main() {


Дата добавления: 2019-02-12; просмотров: 282; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!