У меня есть три массива. Я хочу объединить три из них, но порядок имеет значение, и я НЕ хочу возвращать все перестановки. Так, например:
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?