具有数组“ a”,我想在数组“ a”内寻找一对值。 “ 02”后跟“ 10”,如果找到,我想创建2个新数组,一个 从“ 02”,“ 10”开始,另一个在“ 02”,“ 10”之后的开始3个位置。
a = ["11", "45", "01", "01", "02", "00", "10", "4C", "02", "10", "00", "42", "00", "00", "26"]
如果我分别查看02和10的索引,我分别得到4和6,但是对“ 02”,“ 10”的索引是8。
irb(main)> a.index("02")
=> 4
irb(main)> a.index("10")
=> 6
所需的输出如下:
b = ["02", "10", "00", "42", "00", "00", "26"]
c = ["00", "00", "26"]
我该怎么做?
答案 0 :(得分:2)
def find_em(a)
i = (a.size-1).times.find { |i| [a[i], a[i+1]] == ["02", "10"] }
i.nil? ? nil : [a[i..-1], a[i+4..-1] || []]
end
find_em(a)
#=> [["02", "10", "00", "42", "00", "00", "26"], ["00", "00", "26"]]
find_em ["10", "4C", "02", "10", "00", "42"]
#=> [["02", "10", "00", "42"], []]
find_em ["10", "4C", "02", "10"]
#=> [["02", "10"], []]
find_em ["10", "4C", "10", "00", "42"]
#=> nil
find_em []
#=> nil
答案 1 :(得分:1)
要使其在["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"]]