来自红宝石哈希值的笛卡尔积

问题描述 投票:0回答:1

鉴于我们具有这样的哈希结构{:s => [1、2、3],:c => [“ r”,“ g”,“ b”]},我们如何计算笛卡尔在这种情况下,键值的乘积。哈希中的键值对的数量本质上是动态的,并且可以变化。任何帮助将不胜感激.....

arrays ruby key-value cartesian-product
1个回答
0
投票
   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)
© www.soinside.com 2019 - 2024. All rights reserved.