gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:28 24 4
gpt4 key购买 nike

我有一个数组,它由串联的递增 (+1) 序列集组成。这是一个包含三个序列的示例:

sequences = [2,3,4,7,12,13,14,15]

我正在尝试获取每个序列的第一个和最后一个元素,并返回一个包含这些值的数组。从上面的数组来看,结果应该是这样的:

[[2,4][7,7][12,15]]  

我想出了一个我认为可行的非常天真的解决方案,但它只返回第一个序列。知道为什么吗?和/或任何关于整体更好解决方案的建议?

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

最佳答案

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

sequences.chunk_while { |i, j| i + 1 == j }.to_a
#=> [[2, 3, 4], [7], [12, 13, 14, 15]]

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

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

或更详细:

....map { |a| [a.first, a.last] }

关于ruby - 返回序列中的第一个和最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com