巨大な配列があります(数百行が平均)。
配列の中身はすべてハッシュで{:type=>"", text:=>""}という中身です。
:typeは、A, B, Cの3種類だけです。

今この巨大配列を
α:typeがAとCの配列
β:typeがBとCの配列
に分割したうえで、
αは、:typeがAの要素と:typeがAの要素からインデックスが±3以内の:typeがCの要素のみ
βは、:typeがBの要素と:typeがBの要素からインデックスが±3以内の:typeがCの要素のみ
にしたいんです。


alpha_tmp = big.dup.delete_if do |ele| if ele[:type] == B end
beta_tmp = big.dup.delete_if do |ele| if ele[:type] == A end

alpha = []
is_within = 0
alpha.tmp.each.do |ele, index|
  if ele == A
    alpha << A
    is_within = index
  else
    is_within -4 < index && index < is_within + 4
    alpha << A
end

alpha = alpha.uniq



書いてみましたが・・・なんか糞です。・・・もっと上手い書き方はないものでしょうか?