You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历数组哈希生成所有可能的组合数组?Ruby技术问询

当然可行!Ruby 轻松实现笛卡尔积组合

完全没问题,Ruby 内置的方法正好能帮你搞定这种多数组笛卡尔积的需求,几步就能生成你要的所有组合~

核心思路

你需要的其实是把哈希里的三个数组做「笛卡尔积」运算——也就是每个数组里取一个元素,生成所有可能的排列组合。Ruby 的 Array#product 方法就是专门干这个的。

具体实现

这里有两种写法,按需选择:

写法一:通用版(适配任意数量的数组)

不管你的哈希里有多少组键值对,这个写法都能自动处理:

@attribute_type = { typeA: ['a', 'b', 'c'], typeB: ['1', '2', '3'], typeC: ['9', '8', '7'] }

# 先提取哈希里的所有值数组,再通过 reduce 依次计算笛卡尔积,最后展平嵌套数组
combinations = @attribute_type.values.reduce(&:product).map(&:flatten)

写法二:直观版(针对固定三组数组)

如果确定哈希里只有这三组,直接指定数组调用 product 更清晰:

@attribute_type = { typeA: ['a', 'b', 'c'], typeB: ['1', '2', '3'], typeC: ['9', '8', '7'] }

# 直接让 typeA 的数组和 typeB、typeC 的数组做笛卡尔积
combinations = @attribute_type[:typeA].product(@attribute_type[:typeB], @attribute_type[:typeC])

效果验证

运行上面的代码后,combinations 就是你想要的结果:

["a", "1", "9"], ["a", "1", "8"], ["a", "1", "7"], ["a", "2", "9"], ...

另外要注意:Ruby 1.9+ 的哈希是保留插入顺序的,所以 @attribute_type.values 会严格按照你定义的 typeA、typeB、typeC 顺序返回数组,生成的组合顺序完全符合你的预期~

内容的提问来源于stack exchange,提问作者IBG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:38:17