gpt4 book ai didi

ruby - 用于生成排列的惯用 ruby ?

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:37 25 4
gpt4 key购买 nike

我想知道这个用于生成排列的函数的惯用版本在 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

谢谢!

最佳答案

class Array
def permutations
return [self] if size < 2
perm = []
each { |e| (self - [e]).permutations.each { |p| perm << ([e] + p) } }
perm
end
end

[1, 2, 3].permutations #=> [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

来源:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/32844

编辑:为避免猴子修补,将其放入模块中:

module ArrayExtensions
def permutations
#snip
end
end

Array.send :include, ArrayExtensions

关于ruby - 用于生成排列的惯用 ruby ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com