LoginSignup
5
1

More than 5 years have passed since last update.

[Ruby] 配列を特定の条件で区切る

Last updated at Posted at 2019-04-12

list = %w[1 茉里 2 乃莉 なずな 3 ゆの 宮子]
#=> ["1", "茉里", "2", "乃莉", "なずな", "3", "ゆの", "宮子"]

という配列がある。これを

[['1', '茉里'], ['2', '乃莉', 'なずな'], ['3', 'ゆの', '宮子']]

という様に区切りたい。

配列を区切るといえば思い浮かぶのは Enumerable#each_slice だが、このメソッドは固定の長さに区切るので、今回のように区切った後の配列の長さがまちまちなケースでは使えない。

方法

Enumerable#slice_when を使う。

# 次の要素が整数の文字列の場合は、その手前で区切る。
list.slice_when { |_a, b| b.match?(/\d+/) }.to_a
#=> [["1", "茉里"], ["2", "乃莉", "なずな"], ["3", "ゆの", "宮子"]]

なお、亜種として Enumerable#chunk_while というメソッドも存在する。slice_when は区切る条件を指定し、chunk_while は同じグループにする条件を指定するイメージだ。

5
1
5

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
5
1