Одним из применений Lookup
может быть обратное Dictionary
.
Предположим, у вас телефонная книга реализована в виде Dictionary
набора (уникальных) имен в качестве ключей, каждое имя связано с номером телефона. Но два человека с разными именами могут использовать один и тот же номер телефона. Это не проблема для a 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
каждого изменения последнего. Но для некоторых данных это может быть правильным решением.]