RubyのArrayから順序を保ったまま固まりを抽出する

例えば、こんな感じのデータがあったとします。

data = [
  { x: 0, y: 1 },
  { x: 1, y: 1 },
  { x: 2, y: 1 },
  { x: 3, y: 0 },
  { x: 4, y: 0 },
  { x: 5, y: 1 },
  { x: 6, y: 1 },
]

f:id:commis:20190124095056p:plain

ここから、順序を保ったまま、y == 1のデータだけを抽出したいとします。
Enumerable#chunkが使えます。

data.chunk {|item| item[:y] == 1 }.to_a
=> [[true, [{:x=>0, :y=>1}, {:x=>1, :y=>1}, {:x=>2, :y=>1}]], [false, [{:x=>3, :y=>0}, {:x=>4, :y=>0}]], [true, [{:x=>5, :y=>1}, {:x=>6, :y=>1}]]]

最初の連続するy == 1だけが必要な場合、Enumerable#take_whileが使えます。

data.take_while {|item| item[:y] == 1 }
=> [{:x=>0, :y=>1}, {:x=>1, :y=>1}, {:x=>2, :y=>1}]