Hash.each не возвращает хэш? - PullRequest
1 голос
/ 09 августа 2010

Hash.each возвращает массив [key, value], но если мне нужен хеш?

Пример: {:key => value }

Ответы [ 4 ]

5 голосов
/ 09 августа 2010

Я предполагаю, что вы имели в виду "yields", когда вы сказали "return", потому что Hash#each уже возвращает хеш (получатель).

Чтобы ответить на ваш вопрос: если вам нужен хеш с ключоми значение, которое вы можете просто создать.Например:

hash.each do |key, value|
  kv_hash = {key => value}
  do_something_with(kv_hash)
end

Нет альтернативного each метода, который выдает хэши, поэтому вышеприведенное - лучшее, что вы можете сделать.

1 голос
/ 12 ноября 2012

Я думаю, вы пытаетесь каким-то образом преобразовать хеш, поэтому я дам вам свое решение этой проблемы, которое может быть не совсем таким же. Чтобы изменить хеш, вы должны .map их создать новый хеш.

Вот как я меняю ключ и значения:

h = {:a => 'a', :b => 'b'}
Hash[h.map{ |k,v| [v, k] }]
# => {"a"=>:a, "b"=>:b}
0 голосов
/ 09 августа 2010

Вы можете map хешировать список одноэлементных хэшей, затем вызвать each в списке:

h = {:a => 'a', :b => 'b'}
h.map{ |k,v| {k => v}}.each{ |x| puts x }
0 голосов
/ 09 августа 2010

Вызов .each с двумя параметрами:

>> a = {1 => 2, 3 => 4}
>> a.each { |b, c|
?>     puts "#{b} => #{c}"
>>   }
1 => 2
3 => 4
=> {1=>2, 3=>4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...