Если я не ошибаюсь, таблица ha sh предназначена для быстрого и эффективного поиска ключей до значений , а не наоборот.
неэффективный способ сделать обратное - перебрать все ключи, чтобы найти значение и go оттуда:
v <- NULL
for (k in ls(envir = H)) if ("cat" %in% H[[k]]) v <- k
v
# [1] "animals"
H[[v]]
# [1] "cat" "dog"
, тогда как пропуск кэша будет выглядеть следующим образом:
v <- NULL
for (k in ls(envir = H)) if ("kangaroo" %in% H[[k]]) v <- k
v
# NULL
Если вы хотите что-то эффективнее , я думаю, что (1) вы увеличите сложность, и (2) все записи станут менее быстрыми. Это будет эффективно иметь две таблицы ha sh, одну для сопоставления ключей со значениями и одну для сопоставления каждого значения с ключом. Одна из проблем заключается в том, что в таблице ha sh совершенно законно иметь значение, на которое ссылаются несколько ключей, но не существует идеального обратного логика c: хотя можно указать все ключи-кандидаты, не является отношением 1 к 1.