鉴于我们具有这样的哈希结构{:s => [1、2、3],:c => [“ r”,“ g”,“ b”]},我们如何计算笛卡尔在这种情况下,键值的乘积。哈希中的键值对的数量本质上是动态的,并且可以变化。任何帮助将不胜感激.....
h = { a: [1, 2, 3], b: [:d, :e, :f], c: ["g", "h", "i"] }
first, *rest = h.values
first.product(*rest)
#=> [[1, :d, "g"], [1, :d, "h"], [1, :d, "i"], [1, :e, "g"],
# [1, :e, "h"], [1, :e, "i"], [1, :f, "g"], [1, :f, "h"],
# [1, :f, "i"], [2, :d, "g"], [2, :d, "h"], [2, :d, "i"],
# [2, :e, "g"], [2, :e, "h"], [2, :e, "i"], [2, :f, "g"],
# [2, :f, "h"], [2, :f, "i"], [3, :d, "g"], [3, :d, "h"],
# [3, :d, "i"], [3, :e, "g"], [3, :e, "h"], [3, :e, "i"],
# [3, :f, "g"], [3, :f, "h"], [3, :f, "i"]]
请参见Array#product。
或者,可以写:
values = h.values
values.shift.product(*values)