For example:
[1,1,1].permutation.to_a #=> [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
这个结果应该是根据数组每个元素的 index 排列的结果而不是元素的值,所以会有重复,为何这么设计呢?
http://ruby-doc.org/core-2.3.0/Array.html#method-i-permutation 看 API 说明,没有提到是用 index 排列吧。而且这个方法的目的就是返回所有的排列。如果你想要通过 index 值排列可以先把 [1, 1, 1] 转换成 index, [1, 1, 1].map.with_index{|x, i| i}.permutation.to_a
[1, 1, 1]
[1, 1, 1].map.with_index{|x, i| i}.permutation.to_a
#2 楼 @rubyist518 这个是 n 个不同元素的排练公式,我这里说的是有重复元素情况
#1 楼 @bastengao permutation 这个函数对于 n 个不同元素得到的排列是对的,但是这儿我用了有重复的元素,我的意思是之所以得到我正文里面的结果,有可能是根据每个元素 index 的不同而做出结果里的排列,按照正常思路,结果是不是只该是 [1,1,1],只有这一个排列
@zyjloveher https://github.com/ruby/ruby/blob/c31d06eeb7c9787870bad6bf62955310bb644f33/array.c#L4841 源码中使用 index 来做的排列
#5 楼 @rubyist518 果不其然,thanks