Хелпикс

Главная

Контакты

Случайная статья





ContainsValue(). Remove(). Comparer. Values



ContainsValue()

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

Remove()

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

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

Comparer

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

Keys

Получает коллекцию ключей

Values

Получает коллекцию значений

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

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

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

Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не сам индекс. При перечислении коллекции типа Dictionary<TKey, TValue> из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePair<TKey, TValue>. Напомним, что в этой структуре определяются два поля.

public TKey Key;

public TValue Value;

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

Давайте рассмотрим пример использования словарей:

 

 

Рассмотрим на примере использование словарей:

 

Dictionary<int, string> countries = new Dictionary<int, string>(5);

countries.Add(1, "Russia");

countries.Add(3, "Great Britain");

countries.Add(2, "USA");

countries.Add(4, "France");

countries.Add(5, "China");         

 

foreach (KeyValuePair<int, string> keyValue in countries)

{

Console.WriteLine(keyValue.Key + " - " + keyValue.Value);

}

 

// получение элемента по ключу

string country = countries[4];

// изменение объекта

countries[4] = "Spain";

// удаление по ключу

countries.Remove(2);

Класс словарей также, как и другие коллекции, предоставляет методы Add и Remove для добавления и удаления элементов. Только в случае словарей в метод Add передаются два параметра: ключ и значение. А метод Remove удаляет не по индексу, а по ключу.

 

Так как в нашем примере ключами является объекты типа int, а значениями - объекты типа string, то словарь в нашем случае будет хранить объекты KeyValuePair<int, string>. В цикле foreach мы их можем получить и извлечь из них ключ и значение.

 

Кроме того, мы можем получить отдельно коллекции ключей и значений словаря:

 

Dictionary<char, Person> people = new Dictionary<char, Person>();

people.Add('b', new Person() { Name = "Boris" });

people.Add('t', new Person() { Name = "Tanya" });

people.Add('j', new Person() { Name = "Julia" });

 

foreach (KeyValuePair<char, Person> keyValue in people)

{

// keyValue.Value представляет класс Person

Console.WriteLine(keyValue.Key + " - " + keyValue.Value.Name);

}

 

// перебор ключей

foreach (char c in people.Keys)

{

Console.WriteLine(c);

}

 

// перебор по значениям

foreach (Person p in people.Values)

{

Console.WriteLine(p.Name);

}

Здесь в качестве ключей выступают объекты типа char, а значениями - объекты Person. Используя свойство Keys, мы можем получить ключи словаря, а свойство Values соответственно хранит все значения в словаре.

 

Для добавления необязательно применять метод Add(), можно использовать сокращенный вариант:

 

Dictionary<char, Person> people = new Dictionary<char, Person>();

people.Add('b', new Person() { Name = "Bill" });

people['a'] = new Person() { Name = "Alice" };

Несмотря на то, что изначально в словаре нет ключа 'a' и соответствующего ему элемента, то он все равно будет установлен. Если же он есть, то элемент по ключу 'a' будет заменен на новый объект new Person() { Name = "Alice" }

 

Инициализация словарей

В C# 5.0 мы могли инициализировать словари следующим образом:

 

Dictionary<string, string> countries = new Dictionary<string, string>

{

{"Франция", "Париж"},

{"Германия", "Берлин"},

{"Великобритания", "Лондон"}

};

 

foreach(var pair in countries)

Console.WriteLine("{0} - {1}", pair.Key, pair.Value);

           

То начиная с C# 6.0 доступен также еще один способ инициализации:

 

Dictionary<string, string> countries = new Dictionary<string, string>

{

["Франция"]= "Париж",

["Германия"]= "Берлин",

["Великобритания"]= "Лондон"

};      

 

Задание хэш-таблицы:

Организовать хеш-таблицу с открытой адресацией, используя любую хеш-функцию h(k), M - размер хеш-таблицы. Организовать процедуру поиска по ключу в этой хеш-таблице. Результат поиска - номер ячейки с найденным ключом или сообщение о ненайденном ключе и значении.

 

 


Варианты словари:

 

Дана строка s. Подсчитайте и выведите на экран сколько раз используется каждый символ в строке, используя словарь для хранения этой информации. Заглавные и строчные буквы считать одинаковыми.

 

вариант Строка S
1/14 Коллекция может хранить объекты только одного или различных типов
2/15 Коллекция может иметь постоянный либо динамически изменяющийся размер
3/16 Коллекция – это массив, хеш-таблица, список, стек, множество
4/17 Коллекция - класс, поэтому необходимо объявить экземпляр класса перед работой с ней
5/18 ArrayList представляет массив объектов, размер которого может динамически увеличивается
6/19 Хеш-таблица представляет коллекцию пар ключ-значение, которые упорядочены по хэш-коду ключа
7/20 Очередь представляет коллекцию объектов, которая обслуживается в порядке поступления
8/21 Стэк представляет коллекцию объектов, которая обслуживается в обратном порядке
9/22 Множество — неупорядоченная коллекция, хранящая набор уникальных значений
10/23 Операции над коллекциями: добавление элемента, удаление элемента, поиск
11/24 Список — упорядоченный набор элементов, каждый из которых хранит указатель на след элемент
12/25 Стеки применяются для стеков отмены-возврата операндов, состояний
13/26 Очереди применяются для процессов, потоков, сообщений, буферизации

 

 

Сохранить код проекта в папке класса под именем DinCollection4

Откомпилировать, отладить и выполнить проекты.

Предъявить проекты для проверки.

Внести сведения в отчет по практике и дневник по практике.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.