Одно из применений 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
каждый раз, когда последний изменяется. Но для некоторых данных это может быть правильным решением.]