gpt4 book ai didi

ruby - 如何从哈希值中获取所有可能的组合

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:41 26 4
gpt4 key购买 nike

我有这样的数组散列:

{a: [1, 2], b: [3, 4]}

我正在尝试构建一个数组,其中包含所有可能的值组合,每个值都来自不同的键值对,格式如下:

[{a: 1, b: 3}, {a: 1, b: 4}, {a: 2, b: 3}, {a: 2, b: 4}]

哈希可以有 n 键,每个键可以有 m 值——我不能假设任何数字。每个值(数组)可以有不同的大小。以下也是一个有效的输入:

{a: [1, 2, 3], b: [4, 5, 6, 7], c: [8, 9, 10, 11, 12]}

我得到的最好的是一个包含所有值排列但没有键的数组:

a = {a:[1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}
a.reduce([]) { |acc, (k, v)| acc.empty? ? v : acc.product(v) }.map(&:flatten)
=> [[1, 4, 7], [1, 4, 8], [1, 4, 9], [1, 5, 7], [1, 5, 8], [1, 5, 9], [1, 6, 7], [1, 6, 8], [1, 6, 9], [2, 4, 7], [2, 4, 8], [2, 4, 9], [2, 5, 7], [2, 5, 8], [2, 5, 9], [2, 6, 7], [2, 6, 8], [2, 6, 9], [3, 4, 7], [3, 4, 8], [3, 4, 9], [3, 5, 7], [3, 5, 8], [3, 5, 9], [3, 6, 7], [3, 6, 8], [3, 6, 9]]

我应该如何在 Ruby 中执行此操作?

最佳答案

a = { a: [1, 2], b: [3, 4], c: [5, 6] }
values = a.values
values.first.product(*values[1..-1]).map { |e| a.keys.zip(e).to_h }
#=> [{:a=>1, :b=>3, :c=>5}, {:a=>1, :b=>3, :c=>6},
# {:a=>1, :b=>4, :c=>5}, {:a=>1, :b=>4, :c=>6},
# {:a=>2, :b=>3, :c=>5}, {:a=>2, :b=>3, :c=>6},
# {:a=>2, :b=>4, :c=>5}, {:a=>2, :b=>4, :c=>6}]

适用于具有任何键数的散列。

关于ruby - 如何从哈希值中获取所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com