LoginSignup
0
1

Rubyのchunkメソッドの使い方と動作について

Posted at

rubyのプログラミング問題を解いているときに、模範解答でchunkメソッドというものを見かけたので、どんなメソッドか調べてみました。

概要

chunkメソッドは、RubyのEnumerableモジュールに定義されているメソッドの一つです。このメソッドは、要素をグループ化するために使用されます。要素を特定の条件に基づいてグループ化することができ、その結果をイテレータとして利用することができます。

chunkメソッドは特に、データの連続したグループを作成したい場合や、連続した要素をまとめて処理したい場合に便利です。

使用法

chunkメソッドは、以下のように使用します。

enumerable_object.chunk { |element| block }

enumerable_objectEnumerableモジュールをインクルードしたオブジェクトであり、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メソッドについての説明です。このメソッドを活用することで、要素のグループ化や連続した値の処理を効果的に行うことができます。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1