返回序列中的第一个和最后一个元素

Fel*_*ger 2 ruby

我有一个由连续的增量(+1)序列组成的数组.这是一个有三个序列的例子:

sequences = [2,3,4,7,12,13,14,15]
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取每个序列的第一个和最后一个元素并返回包含这些值的数组.从上面的数组中,结果应如下所示:

[[2,4][7,7][12,15]]  
Run Code Online (Sandbox Code Playgroud)

我想出了这个非常天真的解决方案,我认为它可以工作,但它只返回第一个序列.知道为什么吗?和/或任何建议更好的解决方案?

new_array   = []
start_point = sequences[0]
end_point   = sequences[0]

sequences.map do |element|
  if element == end_point + 1
    end_point = element
  elsif element == end_point
    next
  else
    new_array << [start_point, end_point]
    startpoint   = element
    end_point = element
  end
end
return new_array
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

您可以使用chunk_while查找连续数字:(这也是文档中的示例)

sequences.chunk_while { |i, j| i + 1 == j }.to_a
#=> [[2, 3, 4], [7], [12, 13, 14, 15]]
Run Code Online (Sandbox Code Playgroud)

map随着values_at提取每个子数组的第一个和最后一个元素:

sequences.chunk_while { |i, j| i + 1 == j }.map { |a| a.values_at(0, -1) }
#=> [[2, 4], [7, 7], [12, 15]]
Run Code Online (Sandbox Code Playgroud)

或者更详细:

....map { |a| [a.first, a.last] }
Run Code Online (Sandbox Code Playgroud)