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

标签 arrays ruby algorithm data-structures permutation

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

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/

相关文章:

ruby-on-rails - Ruby on Rails 表单提交错误和成功消息

ruby - 将方法包含到 block 中

ruby - 为什么我的 while 循环卡住了?我忘记了一步吗?

arrays - Swift 数组搞乱了弱变量的释放

java - 如何检查哪些点在圆内?

c++ - 在 C++ 中处理未终止的 char 数组有多容易?

c# - PowerCollections 中 GetValueElseAdd 的 BCL 等价物是什么

c++ - 检查尺寸值及其内容的功能

c++ - 适当的散列函数来散列随机二进制字符串

arrays - 列表中唯一的集合总和