Все комбинации массива
У меня есть массив
a = ["w1", "w2", "w3"]
Как я могу создать новый массив с каждой комбинацией значений? Мне нужно, чтобы выходные данные выглядели так:
["w1", "w2", "w3", "w1 w1", "w1 w2", "w1 w3", "w2 w1", "w2 w2", "w2 w3", "w3 w1", "w3 w2", "w3 w3", "w1 w1 w1", "w1 w1 w2", "w1 w1 w3", "w1 w2 w1", "w1 w2 w2", "w1 w2 w3", "w2 w1 w1", "w2 w1 w2", "w2 w1 w2", "w2 w1 w3", "w2 w2 w1", "w2 w2 w2", "w2 w2 w3", "w2 w3 w1", "w2 w3 w2", "w2 w3 w3", "w3 w1 w1", "w3 w1 w2", "w3 w1 w3", "w3 w2 w1", "w3 w2 w2", "w3 w2 w3", "w3 w3 w1", "w3 w3 w2", "w3 w3 w2"]
Попробуйте код из сгенерировать массив всех комбинаций существующего массива
Результат неверный
"w1", "w2", "w3", "w1 w2", "w1 w3", "w2 w3", "w1 w2 w3"]
1 ответ:
Вот один из способов сделать это, однако этот результат имеет "w3 w3 w3", и вы желаемый результат не делает, но я не вижу логики, чтобы включить "w3 w3" и "w1 w1 w1", но не "w3 w3 w3", поэтому я предполагаю, что вы просто пропустили, чтобы добавить это.
То, что вы ищете, - это не комбинации, а перестановки (с повторением):
a = ["w1", "w2", "w3"] result = (1..a.size).flat_map do |size| a.repeated_permutation(size).map { |perm| perm.join(' ') } end