重叠的 Ruby 切片

4

假设我有数组 [1,2,3,4,5,6,7,8,9,10],想要以每两个元素为一组的方式进行切片,同时保证每组之间有重叠。例如:

期望结果

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

10
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]]

我从来不知道这个方法的存在!谢谢! - Kyle Decot

1
这个可以运行,但不确定是否最短:

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]]

编辑:这并不是最短的方法。 each_cons 是为了完成这个任务而设计的,尽管如果你想要针对更长的切片具有特定的行为,那么这个任务会变得更加有趣。 each_cons(3) 无法控制重叠的数量,而我的答案根本无法处理更长的切片。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接