在红宝石中重叠切片

时间:2013-05-24 13:00:11

标签: 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]

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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)不会让您控制重叠量,而我的答案根本无法处理更长的切片。