2016-05-10 3 views
2

Мне просто нужна структура данных, которая действует аналогично Dictionary, но не только я могу получить доступ к значениям с помощью клавиш, но также получить доступ к клавишам, используя значения.Есть ли что-то вроде «реверсивного словаря»?

Так что было бы что-то вроде этого:

let dict: ReversibleDictionary<String, String> = 
    ["1" : "one", "2" : "two", "3" : "three"] 
dict.valueFromKey("1") // "one" 
dict.keyFromValue("two") // "2" 

Есть ли что-то подобное, что встроенный в стрижа?

Если нет, как я могу создать что-то подобное себе?

Я попытался создать его с помощью 2 NSMutableOrderedSet и использовать линейный поиск, чтобы найти соответствующие значения. Но я считаю, что слишком сложно использовать линейный поиск, что является сложностью O (n). Доступ к словарю должен быть сложностью O (1), правильно?

+0

Временная сложность доступа к словарю зависит от его реализации. может быть O (1) в случае массивов и O (n) в случае связанных списков – mangusta

+0

Я уверен, что словарь похож на хеш-таблицу. И поиск в хэш-таблице - O (1). @mangusta – Sweeper

+0

В широком смысле словарь - это структура данных для доступа к значению на основе его ключа. это может быть массив или связанный список или хэш или дерево или что-то еще. – mangusta

ответ

6

Нет, нет встроенной структуры данных, которая делает это.

Но вы можете легко создать свою собственную структуру данных, состоящую из двух словарей. Когда вы добавляете в этот «ReversableDictionary», вы просто добавляете обратный ко второму словарю.

Тогда внутренне вы можете выполнить смотреть на соответствующий двух словарей путем реализации собственного dict.valueFromKey() и dict.keyFromValue() Методы

Посмотрите должно быть O (1) за счет использования вдвое больше памяти.

+0

О, я вижу! Я думал, что мне нужно использовать наборы. Позвольте мне попробовать это! – Sweeper

+0

Спасибо! Принято! – Sweeper

Смежные вопросы