rubyのプログラミング問題を解いているときに、模範解答でchunkメソッドというものを見かけたので、どんなメソッドか調べてみました。
概要
chunk
メソッドは、RubyのEnumerable
モジュールに定義されているメソッドの一つです。このメソッドは、要素をグループ化するために使用されます。要素を特定の条件に基づいてグループ化することができ、その結果をイテレータとして利用することができます。
chunk
メソッドは特に、データの連続したグループを作成したい場合や、連続した要素をまとめて処理したい場合に便利です。
使用法
chunk
メソッドは、以下のように使用します。
enumerable_object.chunk { |element| block }
enumerable_object
はEnumerable
モジュールをインクルードしたオブジェクトであり、element
はイテレータの各要素を表します。block
は、要素をグループ化するための条件を指定するブロックです。
動作
chunk
メソッドは、イテレータの要素を順番に評価し、連続する要素が同じグループに属する場合にそれらをまとめます。ブロック内の条件に基づいてグループ化が行われ、グループごとに配列の形式で結果が返されます。
例1
整数列を連続する奇数/偶数に分ける例を見てみます。「n.even?」の値が切り替わるところで区切られているのがわかるでしょう。
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk {|n|
n.even?
}.each {|even, ary|
p [even, ary]
}
# => [false, [3, 1]]
# [true, [4]]
# [false, [1, 5, 9]]
# [true, [2, 6]]
# [false, [5, 3, 5]]
この結果は、偶数のグループと奇数のグループの配列を持つ配列となります。各要素は、条件に基づいてグループ化された値です。
chunk
メソッドは、必要に応じて繰り返し処理を行います。同じグループに属する要素が連続している場合は、連続した要素をまとめたグループとして返されます。
例2
nil、 :_separator はある要素を無視したい場合に用います。以下の例では、空行の要素が無視されていることがわかります。
numbers = <<'EOS'
123
456
789
998
999
EOS
datas = numbers.split("\n")
p datas.chunk {|x| x != "" || nil}.map {|x| x.last }
# => [["123", "456"], ["789"], ["998", "999"]]
まとめ
以上が、Rubyのchunk
メソッドについての説明です。このメソッドを活用することで、要素のグループ化や連続した値の処理を効果的に行うことができます。