【发布时间】:2018-10-10 20:53:27
【问题描述】:
给定一个哈希值包含长度不等的数组,
{a: [1, 2, 3], b: [1, 2], c: [1]}
是否可以创建一个包含相同键的哈希数组,由单个值的所有排列组成,如下所示,而无需嵌套多个循环?
[
{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}
]
我们为每个键使用嵌套的each 循环来实现这一点,但这在大范围内看起来很糟糕。实际数据包含更多键。
【问题讨论】:
-
第一个问题:你试过什么?提示:
combination和zip。 -
@tadman zip 不好。如果数组大小不同,则使用以下键压缩每个键的值会产生 nil。这给了我想要的值:
hsh[:a].product(hsh[:b]).product(hsh[:c]).map(&:flatten),现在我只需要弄清楚如何做到这一点,而不需要手动获取产品并为每个键展平,并将每个值应用于新哈希数组中的正确键 -
你说的是排列还是组合?还是你连它们的意思都不知道?