与えられた文字列のすべての可能な順列をリストする次のコードがあります。しかし、私の厄介なリスト(ruby配列)の操作と関数型プログラミングに関する知識が限られているため、結果の配列を取得するにはflattenを使用する必要があります。それはかなりハックです。コードをリファクタリングして、フラット化の使用(乱用)を回避するにはどうすればよいですか?
class String
def remove_char_at(i)
if i==0
self[1..-1]
else
self[0..i-1] + self[i+1..-1]
end
end
end
def permute(str,prefix="")
if str.size==0
prefix
else
str.chars.each_with_index.map do |s,i|
permute(str.remove_char_at(i),prefix+s)
end.flatten
end
end