Двунаправленная хеш-таблица в Ruby

Мне нужна двунаправленная хеш-таблица в Ruby. Например:

h = {:abc => 123, :xyz => 789, :qaz => 789, :wsx => [888, 999]}
h.fetch(:xyz) # => 789
h.rfetch(123) # => abc
h.rfetch(789) # => [:xyz, :qaz]
h.rfetch(888) # => :wsx

Метод rfetch означает обратную выборку и является только моим предложением.

Обратите внимание на три вещи:

  1. Если несколько ключей сопоставляются с одним и тем же значением, то rfetch возвращает их все, упакованные в массив.
  2. Если значение является массивом, то rfetch ищет свой параметр среди элементов массива.
  3. Двунаправленный хеш означает, что оба ] fetch и rfetch должны выполняться в постоянное время.

Существует ли такая структура в Ruby (включая внешние библиотеки)?

Я думал о реализации ее с использованием двух синхронизированных однонаправленных хэшей, когда один из них изменен (и упакован в класс, чтобы избежать проблем с синхронизацией), но, может быть, я мог бы использовать уже существующее решение?

9
задан Mikołaj Pastuszko 3 August 2011 в 12:13
поделиться