Rails Ruby - Как создать цикл на основе подсчитанных объектов? - PullRequest
0 голосов
/ 16 января 2012

Я должен сделать несколько очень повторяющихся вычислений, основанных на количестве объектов.

Пример: 4 объекта.

Затем я должен выполнить эти вычисления:

1+2
1+3
1+4

2+1
2+3
2+4

3+1
3+2
3+4

4+1
4+2
4+3

1+3+2
1+4+3
1+2+4

3+2+1
3+4+2
3+2+4

4+2+1
4+3+1
4+2+3

1+2+3+4

Как это сделать неповторяющимся способом расчета всех возможностей?Я хочу рассчитать все возможности ожидаемого, чтобы объект не появлялся дважды.

Ответы [ 2 ]

2 голосов
/ 16 января 2012
objs = [1, 2, 3, 4]
(1..objs.size).map {|i| objs.permutation(i).map {|o| o.reduce(:+) } }.flatten(1)
# => [
1, # 1
2, # 2
3, # 3
4, # 4
3, # 1+2
4, # 1+3
5, # 1+4
3, # 2+1
5, # 2+3
6, # 2+4
...
10, # 1+2+3+4
...
10 # 4+3+2+1
]
1 голос
/ 16 января 2012

Вы можете посмотреть на Array.permutations

При вызове с блоком выведите все перестановки длины n элементов ary, а затем верните сам массив. Если n не указано, выведите все перестановки всех элементов. Реализация не дает никаких гарантий относительно порядка, в котором получены перестановки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...