将两个不相等的数组合并到哈希

时间:2016-04-25 13:08:11

标签: arrays ruby hash

我需要帮助创建表示Ruby中两个数组的每个可能组合的哈希。

我有什么:

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

2 个答案:

答案 0 :(得分: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"}]

答案 1 :(得分:5)

这应该做的工作:

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