Страница 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>.KeyCollection и Dictionary<TKey, TValue>.ValueCollection> реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection и IEnumerable.
И наконец, в классе DictionaryCTKey, TValue> реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary<TKey, TValue>
public TValue this[TKey key] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не сам индекс.
При перечислении коллекции типа DictionaryCTKey, TValue> из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePairCTKey, TValue> Напомним, что в этой структуре определяются два поля.
<b>public TKey Key;</b>
<b>public TValue Value;</b>
В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePairCTKey, TValue> не используется непосредственно, поскольку средства класса DictionaryCTKey, TValue> позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа Dictionary<TKey, TValue>, например, в цикле foreach перечисляемыми объектами являются пары типа KeyValuePair.
Все ключи в коллекции типа DictionaryCTKey, TValue> должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными. К тому же объекты не хранятся в коллекции типа DictionaryCTKey, TValue> в отсортированном порядке.
В приведенном ниже примере демонстрируется применение класса DictionaryCTKey, TValue>
<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<string, double> diet = </b>
<b> new Dictionary<string, double>(); </b>
<b> // Добавить элементы в коллекцию,</b>
<b> diet.Add("Батлер, Джон", 73000);</b>
<b> diet.Add("Шварц, Capa", 59000);</b>
<b> diet.Add("Пайк, Томас", 45000);</b>
<b> diet.Add("Фрэнк, Эд", 99000); </b>
<b> // Получить коллекцию ключей, т.е. фамилий и имен. </b>
<b> ICollection<string> с = diet.Keys; </b>
<b> // Использовать ключи для получения значений, т.е. зарплаты,</b>
<b> foreach(string str in с) </b>
<b> Console.WriteLine ("{0}, зарплата: {1:C}", str, diet[str]); </b>
<b> }</b>
<b>}</b>
Ниже приведен результат выполнения этой программы.
Батлер, Джон, зарплата: $73 000,00
Шварц, Capa, зарплата: $59 000,00
Пайк, Томас, зарплата: $45 000,00
Фрэнк, Эд, зарплата: $99 000,00
В коллекции класса SortedDictionary<TKey, TValue> пары "ключ-значение" хранятся таким же образом, как и в коллекции класса Dictionary<TKey, TValue>, за исключением того, что они отсортированы по соответствующему ключу. В классе SortedDictionary<TKey, TValue> реализуются интерфейсы IDictionary, IDictionary<TKey, TValue>, ICollection, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable и IEnumerable<KeyValuePair<TKey, TValue>>. В классе SortedDictionary<TKey, TValue> предоставляются также следующие конструкторы.