【发布时间】:2021-09-20 17:21:40
【问题描述】:
假设我有这两个数组:
my @varA = ("a","b"); # all possible values of varA
my @varB = (1,2); # all possible values of varB
我想得到输出变量组合:
varA = a, varB = 1; # the first possible combination
varA = a, varB = 2;
varA = b, varB = 1;
varA = b, varB = 2; # the last possible combination
我查看了 Algorithm::Combinatorics 和相关模块,但我只能看到它们用于从 single 数组中获取元素组合的示例。
有没有比嵌套循环更简单的方法?
编辑:
为了完整起见,我有许多keys,命名变量,可以采用许多可能值之一。我需要生成每个可能的 key=value 对的所有组合(不重复相同的键 - 每个组合只有唯一的键)。
假设我有以下属性键:
ShoeSize # can be one of a set of size values
CurrentAge # can be any integer from 0 up to, say, 110 years
HeightInCm # can be any integer up to, say, 200 (2m tall!)
现在假设我正在研究统计数据,我想生成 ShoeSize、HeightInCm 和 CurrentAge 的每个组合,然后开始计算有多少人匹配每个值组合(不过,请忽略计数位 - 这只是为了说明 -我的每个真实组合只有一个实例)。
我将每个组合存储为一个数组中的“3 键哈希”(引用,即每个都指向同一匿名哈希 set 的实例)。
示例输出:
@AoH = (
[ # element 0
{
ShoeSize=10,
CurrentAge=14,
HeightInCm=150
}
],
[ # element 1
{
ShoeSize=12,
CurrentAge=23,
HeightInCm=172
}
],
[ # element 2
{
ShoeSize=8,
CurrentAge=64,
HeightInCm=167
}
],
[ # element 3
{
etc.
}
]
)
如何使用正确的唯一键集生成这个组合哈希数组是真正的问题。
【问题讨论】:
-
“比嵌套循环更简单”?你的意思是比
for my $varA (@varA) { for my $varB (@varB) { print "varA = $varA, varB = $varB" }更简单?我认为您将很难找到比这更简单的东西。 -
@TLP 当然,我的例子很简单。我的真实代码有 10-15 个级别,每个级别有许多可选值。这是产品问题。为了便于解释,我将其分解。
-
你想要什么样的输出——像
(a1, b1, a2, b2)这样的组合值列表,或者像你显示的那样由两者组成的一些字符串......? -
@skeetastax 好吧,尽量不要简化太多。我们在这里获得各种技能水平的问题。
标签: arrays perl variables combinations element