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 }, ]
ここから、順序を保ったまま、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}]