Одно использование Lookup
может быть обратным Dictionary
.
Предположим, у вас есть телефонная книга, реализованная как Dictionary
с кучей (уникальных) имен в качестве ключей, каждое имя связано с номером телефона. Но два человека с разными именами могут иметь один и тот же номер телефона. Это не проблема для Dictionary
, которая не заботится о том, чтобы две клавиши соответствовали одному значению.
Теперь вам нужен способ поиска, кому принадлежит данный номер телефона. Вы строите Lookup
, добавляя все KeyValuePairs
от Dictionary
, но назад, со значением как ключом и ключом как значение. Теперь вы можете запросить номер телефона и получить список имен всех людей, у которых есть номер телефона.Построение Dictionary
с теми же данными сбросят данные (или не в зависимости от того, как вы сделали это), так как делать
dictionary["555-6593"] = "Dr. Emmett Brown";
dictionary["555-6593"] = "Marty McFly";
означает, что вторая запись перезаписывает первый - Док больше не будет отображаться.
Попытка написать одни и те же данные в несколько ином виде:
dictionary.Add("555-6593", "Dr. Emmett Brown");
dictionary.Add("555-6593", "Marty McFly");
бы бросить исключение на второй линии, так как вы не можете Add
ключ, который уже в Dictionary
.
[Конечно, вы можете использовать некоторую другую единую структуру данных для поиска в обоих направлениях и т. Д. Этот пример означает, что вы должны регенерировать Lookup
от Dictionary
каждый раз, когда последний изменяется. Но для некоторых данных это может быть правильным решением.]
Думаю, чтобы этот ответ был лучше, вы могли бы заменить некоторые из варов. Для учебных целей я считаю, что легче следовать, когда типы выражаются четко. Просто мои 2 цента :) –
Если у этого есть лучшее из обоих миров, то зачем беспокоиться о Словаре? –
@KyleBaran: Потому что это было бы бессмысленно для подлинных коллекций ключей/значений, где есть только одно значение для каждого ключа. –