Почему мой хэш имеет один и тот же ключ, сопоставленный с несколькими значениями? - PullRequest
1 голос
/ 04 марта 2012

У меня есть хеш, который отображает массив целых чисел в целое число.По какой-то причине хэш имеет один ключ, сопоставленный с несколькими значениями, такими как:

{[1,2]=>3, [1,2]=> 4}

Как можно предотвратить это?Запуск

for key, value in map
    puts key.inspect + "=>" + value.inspect + ":" + key.hash.inspect
end

дает мне

[1, 2]=>11:11
[0, 4, 6, 8, 9]=>10:253
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]=>15:11189
[0, 3, 4, 6, 7, 8, 9]=>13:981
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]=>14:11189
[0, 1, 2, 4, 5, 6, 7, 8, 9]=>12:4661

1 Ответ

5 голосов
/ 04 марта 2012

Я могу вспомнить два случая. На первом включается скрытый compare_by_identity. Не знаю, что с этим делать. Не включаете это? Скопировать все в обычный хеш?

h={}
h.compare_by_identity
h[[1,2]]=2
h[[1,2]]=3
p h #=> {[1, 2]=>2, [1, 2]=>3}

Второй случай более правдоподобен: ключ меняется после помещения в хеш.

h={}
h[[1,2,3]]=2
h[[1,2]]=3
h.keys.first.pop # assuming ruby 1.9
p h #=> {[1, 2]=>2, [1, 2]=>3}

Это легко исправить (но также легко забыть):

h.rehash
p h #=> {[1, 2]=>3}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...