Ruby 当数组包含重复元素的时候,Ruby array#permutation 的方法返回有重复

jasonZYJ · 2016年03月08日 · 最后由 zyjloveher 回复于 2016年03月09日 · 2232 次阅读

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

#2 楼 @rubyist518 这个是 n 个不同元素的排练公式,我这里说的是有重复元素情况

#1 楼 @bastengao permutation 这个函数对于 n 个不同元素得到的排列是对的,但是这儿我用了有重复的元素,我的意思是之所以得到我正文里面的结果,有可能是根据每个元素 index 的不同而做出结果里的排列,按照正常思路,结果是不是只该是 [1,1,1],只有这一个排列

#5 楼 @rubyist518 果不其然,thanks

需要 登录 后方可回复, 如果你还没有账号请 注册新账号