从Ruby中的数组中删除连续数字组

时间:2018-11-20 18:16:12

标签: ruby

我有一个数组:

[1, 2, 3, 6, 8, 9, 10, 23, 34, 35, 36, 45, 50, 51, ...]

我试图删除每组连续的数字,所以最终得到:

[6, 23, 45, ...]

我正在寻找序列号中的异常。有人有建议吗?

我最初的尝试仅检查每个元素之前的ID:

non_consecutive_ids = []
ids.each_with_index do |x, i|
  unless x == ids[i-1] + 1
    non_consecutive_ids << x
  end
end

我想我缺少的是还要检查数组中的下一个元素是否比当前元素大1。

2 个答案:

答案 0 :(得分:6)

其他选项:

array.chunk_while { |i, j| i + 1 == j }.select { |e| e.size == 1 }.flatten
#=> [6, 23, 45]

Enumerable#chunk_while的优点在于它需要两个参数。核心文档只是一个逐步增加子序列的示例。

答案 1 :(得分:2)

您可以使用select并检查周围的值:

array.select.with_index{ |x, index| (array[index-1] != x-1) && (array[index+1] != x+1)}