【问题标题】:Overlapping slices in ruby [duplicate]红宝石中的重叠切片[重复]
【发布时间】:2013-05-20 02:10:15
【问题描述】:

鉴于我有数组[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]

【问题讨论】:

    标签: ruby


    【解决方案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) 不会让您控制重叠量,我的回答根本无法处理更长的切片。

    【讨论】:

      【解决方案2】:
      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]]
      

      【讨论】:

      • 我从来不知道这种方法存在!谢谢!
      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 2011-08-12
      • 2019-12-24
      • 2010-12-18
      • 2018-05-17
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多