Добавить в цитаты Настройки чтения

Страница 467 из 502

<b>    diet.Add(&quot;Фрэнк, Эд&quot;, 99000);</b>

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

<b>    ICollection&lt;string&gt; с = diet.Keys;</b>

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

<b>    foreach(string str in с)</b>

<b>      Console.WriteLine(&quot;{0}, зарплата: {1:C}&quot;, str, diet[str]);</b>

<b>  }</b>

<b>}</b>

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

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

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

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

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

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

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

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

<b>public SortedList()</b>

<b>public SortedList(IDictionaryCTKey, TValue&gt; dictionary)</b>

<b>public SortedList(int capacity)</b>

<b>public SortedList(IComparer&lt;TK&gt; comparer)</b>

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

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

В классе SortedList&lt;TKey, TValue&gt; определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 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&lt;TK, TV&gt; определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.

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

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