Как использовать ключи из Hash для создания нового Hash, где значение каждого ключа является самим ключом? - PullRequest
0 голосов
/ 10 декабря 2010

Так что это тривиальный, но, надеюсь, веселый вопрос. Мне нужно сделать Hash с идентичными ключами и значениями из ключей существующего Hash. Вот пример ввода вместе с моей лучшей попыткой:

input = {'cat' => 'meow', 'dog' => nil}
Hash[*input.keys.map {|k| [k,k]}.flatten]
#=> {'cat' => 'cat', 'dog' => 'dog'}

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

Вот как я бы сделал то же самое в Python, и я нахожу это немного более читабельным:

dict([[a,a] for a in input])

Но это может быть просто потому, что я привык читать Python!

Поиск предложений, которые будут работать с Ruby 1.8.6 - версией, которой я ограничен.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2010
h = {'cat' => 'meow', 'dog' => nil}
#=> {"cat"=>"meow", "dog"=>nil}
Hash[h.keys.map{|k| [k,k]}]
#=> {"cat"=>"cat", "dog"=>"dog"}

Вот еще один, немного грязный способ (и я думаю, что он работает в 1.8.6):

h.merge(h){|k,v,v| k}
2 голосов
/ 10 декабря 2010
Hash[input.keys.zip(input.keys)] #=> {"cat"=>"cat", "dog"=>"dog"}

Или с впрыском:

input.keys.inject({}) { |h, k| h[k] = k ; h } #=> {"cat"=>"cat", "dog"=>"dog"}

Второй также работает в 1.8.6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...