gpt4 book ai didi

arrays - 从多个数组创建组(子数组的顺序很重要)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:59 24 4
gpt4 key购买 nike

我有三个数组。我想将它们三个结合起来,但顺序很重要,我不想返回所有排列。例如:

STATE = [ 'Pennsylvania' ]
COUNTY = [ 'Bucks', 'Montgomery']
PROFESSION = ['Doctor', 'Firefighter', 'Teacher']

预期输出为:

[
['Pennsylvania', 'Bucks', 'Doctor'],
['Pennsylvania', 'Bucks', 'Firefighter'],
['Pennsylvania', 'Bucks', 'Teacher'],

['Pennsylvania', 'Montgomery', 'Doctor'],
['Pennsylvania', 'Montgomery', 'Firefighter'],
['Pennsylvania', 'Montgomery', 'Teacher']
]

就是这样。状态永远是第一项。县永远是第二项。专业永远是第三项,并且按照特定的顺序。不应有重复。

州、县和专业的列表将继续增长。但它会遵循相同的模式。

这些都是错误的:

['Bucks', 'Pennsylvania', 'Doctor']
['Teacher', 'Montgomery', 'Pennsylvania']
['Pennsylvania', 'Bucks', 'Montgomery']

那么我尝试了什么?我认为也许使用排列会是一个很好的工具。但正如您猜想的那样,它创造了所有可能的组合。所以我尝试使用惰性迭代器来限制结果:

( STATE + COUNTY + PROFESSION ).permutation(3).lazy.first(10)
=> [["Pennsylvania", "Bucks", "Montgomery"], ["Pennsylvania", "Bucks", "Doctor"], ["Pennsylvania", "Bucks", "Firefighter"], ["Pennsylvania", "Bucks", "Teacher"], ["Pennsylvania", "Montgomery", "Bucks"], ["Pennsylvania", "Montgomery", "Doctor"], ["Pennsylvania", "Montgomery", "Firefighter"], ["Pennsylvania", "Montgomery", "Teacher"], ["Pennsylvania", "Doctor", "Bucks"], ["Pennsylvania", "Doctor", "Montgomery"]]

但是正如您所看到的,我想要的顺序并没有保留在 then 子数组中,而且这是非常有问题的,因为每个数组的长度都是可变的,并且会增长。

在 Ruby 中解决这个问题的简洁方法是什么?

最佳答案

您要查找的是列表的乘积,而不是排列函数为您提供的组合。您的代码甚至会返回诸如 ["Teacher", "Firefighter", "Montgomery"] 之类的内容,其中您有两个职业。值得庆幸的是,Ruby 数组提供了一个 product function :

STATE.product(COUNTY, PROFESSION)
=> [["Pennsylvania", "Bucks", "Doctor"], ["Pennsylvania", "Bucks", "Firefighter"], ["Pennsylvania", "Bucks", "Teacher"], ["Pennsylvania", "Montgomery", "Doctor"], ["Pennsylvania", "Montgomery", "Firefighter"], ["Pennsylvania", "Montgomery", "Teacher"]]

列表 A、B 和 C 的乘积将返回三个元素的所有不同列表,这些元素按顺序分别包含来自 A、B 和 C 的一个元素。将其与您调用的 permutation 函数进行比较,它将您的三个列表连接在一起并为您提供来自统一列表的三个不同元素的所有组合.当您连接时,您会丢弃所需元素之间的分隔线。

关于arrays - 从多个数组创建组(子数组的顺序很重要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017588/

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