【问题标题】:Ruby array access 2 consecutive(chained) elements at a timeRuby 数组一次访问 2 个连续(链接)元素
【发布时间】:2013-03-18 21:55:45
【问题描述】:

现在,这是数组,

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

我想要,

[1,2],[2,3],[3,4] upto [8,9]

当我这样做时,我得到 each_slice(2),

[[1,2],[3,4]..[8,9]]

我目前正在这样做,

arr.each_with_index do |i,j|
  p [i,arr[j+1]].compact #During your arr.size is a odd number, remove nil.
end

有没有更好的办法??

【问题讨论】:

标签: ruby arrays each


【解决方案1】:

Ruby 能读懂你的想法。您想要缺点执行元素吗?

[1, 2, 3, 4, 5, 6, 7, 8, 9].each_cons(2).to_a
# => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9]]

【讨论】:

    【解决方案2】:

    .each_cons 完全符合您的要求。

    [1] pry(main)> a = [1,2,3,4,5,6,7,8,9]
    => [1, 2, 3, 4, 5, 6, 7, 8, 9]
    [2] pry(main)> a.each_cons(2).to_a
    => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9]]
    

    【讨论】:

      【解决方案3】:

      你几乎是对的 :)

      arr = [1,2,3,4,5,6,7,8,9]
      arr.each_cons(2) do |chunk|
        p chunk
      end
      # >> [1, 2]
      # >> [2, 3]
      # >> [3, 4]
      # >> [4, 5]
      # >> [5, 6]
      # >> [6, 7]
      # >> [7, 8]
      # >> [8, 9]
      

      【讨论】:

        【解决方案4】:

        如果你想实现自己的each_cons

        arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        cons = 2
        
        0.upto(arr.size - cons) do |i|
          p arr[i, cons]
        end
        

        输出:

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

        【讨论】:

          猜你喜欢
          • 2017-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 2019-01-07
          • 1970-01-01
          相关资源
          最近更新 更多