Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从多个阵列创建组(子阵列的顺序很重要)_Arrays_Ruby_Algorithm_Data Structures_Permutation - Fatal编程技术网

Arrays 从多个阵列创建组(子阵列的顺序很重要)

Arrays 从多个阵列创建组(子阵列的顺序很重要),arrays,ruby,algorithm,data-structures,permutation,Arrays,Ruby,Algorithm,Data Structures,Permutation,我有三个数组。我想把它们三者结合起来,但顺序很重要,我不想返回所有排列。例如: STATE = [ 'Pennsylvania' ] COUNTY = [ 'Bucks', 'Montgomery'] PROFESSION = ['Doctor', 'Firefighter', 'Teacher'] 预期产出将是: [ ['Pennsylvania', 'Bucks', 'Doctor'], ['Pennsylvania', 'Bucks', 'Firefighter'], ['P

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

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"]] 
但是正如你所看到的,我想要的顺序并没有保留在子数组中,而且这是非常错误的,因为每个数组都是可变长度的,并且会增长

用Ruby解决这个问题的干净方法是什么?

使用

使用


你要找的是列表的乘积,而不是排列函数给出的组合。您的代码甚至会返回类似于
[“教师”、“消防员”、“蒙哥马利”]
的内容,其中您有两种职业。幸运的是,Ruby阵列提供了:


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

您要查找的是列表的乘积,而不是排列函数提供的组合。您的代码甚至会返回类似于
[“教师”、“消防员”、“蒙哥马利”]
的内容,其中您有两种职业。幸运的是,Ruby阵列提供了:


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

Oops,在提交我的答案之前没有看到您的答案+1真诚地说:)哎呀,在提交我的答案之前没有看到你的答案+1真诚地:)
STATE.product(COUNTY, PROFESSION)
 => [["Pennsylvania", "Bucks", "Doctor"],
     ["Pennsylvania", "Bucks", "Firefighter"],
     ["Pennsylvania", "Bucks", "Teacher"],
     ["Pennsylvania", "Montgomery", "Doctor"],
     ["Pennsylvania", "Montgomery", "Firefighter"],
     ["Pennsylvania", "Montgomery", "Teacher"]]
STATE.product(COUNTY, PROFESSION)
=> [["Pennsylvania", "Bucks", "Doctor"], ["Pennsylvania", "Bucks", "Firefighter"], ["Pennsylvania", "Bucks", "Teacher"], ["Pennsylvania", "Montgomery", "Doctor"], ["Pennsylvania", "Montgomery", "Firefighter"], ["Pennsylvania", "Montgomery", "Teacher"]]