Reputation: 41
I need help with creating hash representing every possible combination of two arrays in Ruby.
What I have:
numbers = [1, 2]
letters = ['q', 'w', 'e', 'r']
What I need:
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' }
]
Important: I will never know how many items "numbers" or "letters" array contains (only that these are never equal in length), this varies per case.
So far following has gotten me closest to goal, but this submits all the letters to each number all together and I don't understand how to take it further without errors:
combination = Hash.new []
numbers.each do |nr|
combination[:number => nr] = [:letter => letters]
end
Upvotes: 3
Views: 150
Reputation: 9226
product might be what you're looking for:
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"}]
Upvotes: 7
Reputation: 3053
This should do the work:
combination = []
numbers.each do |n|
letters.each { |l| combination << {number: n, letter: l} }
end
Upvotes: 5