2010-08-09 7 views

Répondre

5

Je suppose que vous vouliez dire « rendements » où vous dites « retour » parce que Hash#each retourne déjà un hachage (le récepteur).

Pour répondre à votre question: Si vous avez besoin d'un hachage avec la clé et la valeur, vous pouvez en créer un. Comme ceci:

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

Il n'y a pas de méthode alternative qui donne each hashs, de sorte que ce qui précède est le meilleur que vous pouvez faire.

0

Appel .each avec deux paramètres:

>> a = {1 => 2, 3 => 4} 
>> a.each { |b, c| 
?>  puts "#{b} => #{c}" 
>> } 
1 => 2 
3 => 4 
=> {1=>2, 3=>4} 
0

Vous pouvez map le hachage à une liste de hash à un seul élément, puis appelez each sur la liste:

h = {:a => 'a', :b => 'b'} 
h.map{ |k,v| {k => v}}.each{ |x| puts x } 
1

Je pense que vous essayez pour transformer le hash en quelque sorte, alors je vais vous donner ma solution à ce problème, qui peut ne pas être exactement le même. Pour modifier un hachage, vous devez les .map et construire un nouveau hachage.

Voici comment j'inverse et valeurs clés:

h = {:a => 'a', :b => 'b'} 
Hash[h.map{ |k,v| [v, k] }] 
# => {"a"=>:a, "b"=>:b} 
Questions connexes