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

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

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

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

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

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

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

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

public Dictionary<TKey, TValue>. KeyCollection Keys { get; } - Получает коллекцию ключей

public Dictionary<TKey, TValue>. ValueCollection Values { get; } - Получает коллекцию значений

Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys и Values. В коллекциях типа DictionaryCTKey, TValue&gt;.KeyCollection и Dictionary&lt;TKey, TValue&gt;.ValueCollection&gt; реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection и IEnumerable.

И наконец, в классе DictionaryCTKey, TValue&gt; реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary&lt;TKey, TValue&gt;

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

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

При перечислении коллекции типа DictionaryCTKey, TValue> из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePairCTKey, TValue&gt; Напомним, что в этой структуре определяются два поля.

<b>public TKey Key;</b>

<b>public TValue Value;</b>

В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePairCTKey, TValue&gt; не используется непосредственно, поскольку средства класса DictionaryCTKey, TValue&gt; позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа Dictionary&lt;TKey, TValue&gt;, например, в цикле foreach перечисляемыми объектами являются пары типа KeyValuePair.

Все ключи в коллекции типа DictionaryCTKey, TValue&gt; должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными. К тому же объекты не хранятся в коллекции типа DictionaryCTKey, TValue&gt; в отсортированном порядке.

В приведенном ниже примере демонстрируется применение класса DictionaryCTKey, TValue&gt;

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

<b>// коллекции DictionaryCTKey, TValueX</b>

<b>using System; </b>

<b>using System.Collections.Generic; </b>

<b>class GenDictionaryDemo {</b>

<b>  static void Main() { </b>

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

<b>    // работников и их зарплаты. </b>

<b>    Dictionary&lt;string, double&gt; diet = </b>

<b>            new Dictionary&lt;string, double&gt;(); </b>

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

<b>    diet.Add(&quot;Батлер, Джон&quot;, 73000);</b>

<b>    diet.Add(&quot;Шварц, Capa&quot;, 59000);</b>

<b>    diet.Add(&quot;Пайк, Томас&quot;, 45000);</b>

<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

Шварц, Capa, зарплата: $59 000,00

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

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

В коллекции класса SortedDictionary&lt;TKey, TValue&gt; пары "ключ-значение" хранятся таким же образом, как и в коллекции класса Dictionary&lt;TKey, TValue&gt;, за исключением того, что они отсортированы по соответствующему ключу. В классе SortedDictionary&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;. В классе SortedDictionary&lt;TKey, TValue&gt; предоставляются также следующие конструкторы.