给定包含不等长度数组的值的散列,
{a: [1, 2, 3], b: [1, 2], c: [1]}
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个包含相同键的哈希数组,单个值的所有排列如下所示,而不需要嵌套多个循环?
[
{a: 1, b: 1, c: 1},
{a: 1, b: 2, c: 1},
{a: 2, b: 1, c: 1},
{a: 2, b: 2, c: 1},
{a: 3, b: 2, c: 1},
{a: 3, b: 2, c: 1}
]
Run Code Online (Sandbox Code Playgroud)
我们使用each每个键的嵌套循环来实现这一点,但这看起来很大规模.实际数据包含更多密钥.
keys = hash.keys
hash.values.inject(:product).map do |p|
Hash[keys.zip(p.flatten)]
end
Run Code Online (Sandbox Code Playgroud)