2016-04-25 11 views
3

Rubyで可能なすべての2つの配列の組み合わせを表すハッシュを作成するのに助けが必要です。私が持っているもの2つの不等な配列をハッシュに結合する

私は必要なもの
numbers = [1, 2] 
letters = ['q', 'w', 'e', 'r'] 

combination = [ 
{ number: 1, letter: 'q' }, 
{ number: 1, letter: 'w' }, 
{ number: 1, letter: 'e' }, 
{ number: 1, letter: 'r' }, 
{ number: 2, letter: 'q' }, 
{ number: 2, letter: 'w' }, 
{ number: 2, letter: 'e' }, 
{ number: 2, letter: 'r' } 
] 
重要

:私はこれらのことはありません唯一のこと(「手紙」配列が含まれているどのように多くの項目「番号」または知っていることはありません長さが等しい)、これはケースごとに異なります。

これまでのところ、次のように最も近い目標に私を得ているが、これはすべて一緒に各番号にすべての文字を提出すると、私はエラーなしで、さらにそれを取る方法を理解していない:

combination = Hash.new [] 
    numbers.each do |nr| 
    combination[:number => nr] = [:letter => letters] 
    end 

答えて

7

productは、あなたが探しているものかもしれません:

numbers.product(letters).map { |n, l| {number: n, letter: l} } 
# => [{:number=>1, :letter=>"q"}, {:number=>1, :letter=>"w"}, {:number=>1, :letter=>"e"}, {:number=>1, :letter=>"r"}, {:number=>2, :letter=>"q"}, {:number=>2, :letter=>"w"}, {:number=>2, :letter=>"e"}, {:number=>2, :letter=>"r"}] 
+2

さらに、' numbers.product(letters).map { a、b | {"number" => a、 "letter" => b}} ':) – shivam

+0

良い解決法ユーゲン – Jon

5

これが何をすべき作品:

combination = [] 
numbers.each do |n| 
    letters.each { |l| combination << {number: n, letter: l} } 
end 
+0

おかげで、このIまさに私が自分では理解できなかったもの! :) –

+1

これは、* each_with_object * ... 'numbers.each_with_object([])do | n、combination | ... 'を使ってさらに簡潔にすることができます。 –

関連する問題