首页 > 解决方案 > 在一对值之前剪切数组元素

问题描述

有了数组“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"]

我怎样才能做到这一点?

标签: arraysrubyremove-if

解决方案


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 

推荐阅读