Ruby 红宝石重叠切片

Ruby 红宝石重叠切片,ruby,Ruby,假设我有数组[1,2,3,4,5,6,7,8,9,10]一次抓取2个元素的一个片段,同时确保每个片段之间有重叠,最短的方法是什么。例如: 预期结果 [1,2] [2,3] [3,4] [4,5] [5,6] [6,7] [7,8] [8,9] [9,10] [10,nil] 这是可行的,但不确定它是否最短: a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] b = a.slice(1,a.count) => [2, 3, 4, 5, 6, 7, 8, 9, 10]

假设我有数组
[1,2,3,4,5,6,7,8,9,10]
一次抓取2个元素的一个片段,同时确保每个片段之间有重叠,最短的方法是什么。例如:

预期结果

[1,2]
[2,3]
[3,4]
[4,5]
[5,6]
[6,7]
[7,8]
[8,9]
[9,10]
[10,nil]

这是可行的,但不确定它是否最短:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = a.slice(1,a.count)
 => [2, 3, 4, 5, 6, 7, 8, 9, 10]
a.zip(b)
 => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [9, 10], [10, nil]]

编辑:它不是最短的
每个_cons
都是为这个任务制作的,不过如果你想在更长的切片中有一个特定的行为,这个任务会变得更有趣<代码>每个缺点(3)无法控制重叠量,我的答案根本无法处理更长的切片。

我从来不知道有这种方法存在!谢谢
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(a + [nil]).each_cons(2).to_a
# => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7],[7, 8], [8, 9], [9, 10], [10, nil]]