Rubyには flatten
という配列を再帰的に平坦化するメソッドがあります。ただ、この flatten
は全ての要素に対して実行されるので「指定した要素だけを平坦化したい」ということは出来ません。
p [[1,2],[3,4],[5,6]].flatten #=> [1, 2, 3, 4, 5, 6]
p [[1,2],[[3,4],[5,6]]].flatten #=> [1, 2, 3, 4, 5, 6]
そこで、指定した要素だけを平坦化出来るようなコードを書いてみました。
class Array
def flat_at(index, level = nil)
insert(index, *[delete_at(index)].flatten(level))
end
end
p [[1,2],[3,4],[5,6]].flat_at(1) #=> [[1, 2], 3, 4, [5, 6]]
これで、指定した要素だけ flatten
が実行出来るようになりました
おまけ
上のコードを書いてる時に flatten
が引数を取れることを知りました。 再帰の深さを引数で指定出来るみたいです。
p [[[1]]].flatten #=> [1]
p [[[1]]].flatten(0) #=> [[[1]]]
p [[[1]]].flatten(1) #=> [[1]]
p [[[1]]].flatten(2) #=> [1]
参考サイト