Чтобы позволить ему работать с большим количеством вхождений ["02", "10"]
, условно украденный у @Cary Swoveland, ответ:)
def split_strange(ary)
res = []
(ary.size - 1).times do |i|
res << [ary[i..-1], ary[i+4..-1]] if [ary[i], ary[i+1]] == ["02", "10"]
end
return res.flatten(1) # or whathever
end
Итак, он может обрабатывать также:
k = ["02", "10", "02", "10", "00", "42", "00", "00", "26"]
split_strange(k)
#=> [["02", "10", "02", "10", "00", "42", "00", "00", "26"], ["00", "42", "00", "00", "26"], ["02", "10", "00", "42", "00", "00", "26"], ["00", "00", "26"]]
Альтернатива, но работает с одним вхождением:
def split_strange_2(ary)
tmp = ary.slice_when { |a, b| a == "02" and b == "10" }.to_a
res = tmp.last.unshift tmp.first.last
return res, res[4..-1] || [] if tmp.size == 2
end
split_strange_2(a)
#=> [["02", "10", "00", "42", "00", "00", "26"], ["00", "00", "26"]]