【发布时间】:2012-10-03 12:07:04
【问题描述】:
我想知道这个用于生成排列的函数的惯用版本在 Ruby 中会是什么样子。我知道[1,2,3].permutation.to_a 会产生相同的结果,但我对学习 Ruby 以及如何在 Ruby 中解决此类递归问题更感兴趣。
def permutations(seq)
if seq.empty? || seq.count == 1
seq
else
seq.map { |x|
permutations(seq.select { |e| e != x }).map { |p|
if p.class == Fixnum
[x, p]
else
p.unshift(x)
end
}
}.flatten(1)
end
end
谢谢!
【问题讨论】:
-
您可以将
if简化为case (p)和when Fixnum。