|
||||||||||||||||||||||||||||||
ContainsValue(). Remove(). Comparer. Values ⇐ ПредыдущаяСтр 4 из 4 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. Подсчитайте и выведите на экран сколько раз используется каждый символ в строке, используя словарь для хранения этой информации. Заглавные и строчные буквы считать одинаковыми.
Сохранить код проекта в папке класса под именем DinCollection4 Откомпилировать, отладить и выполнить проекты. Предъявить проекты для проверки. Внести сведения в отчет по практике и дневник по практике.
|
||||||||||||||||||||||||||||||
|