【问题标题】:Converting ruby array to array of consecutive pairs将ruby数组转换为连续对数组
【发布时间】:2010-08-13 14:25:30
【问题描述】:

将 ruby​​ 数组转换为其元素的连续对数组的最简单方法是什么?

我的意思是:

x = [:a, :b, :c, :d]

预期结果:

y #=> [[:a, :b], [:c, :d]]

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:

    使用Enumerable#each_slice:

    y = x.each_slice(2).to_a
    #=> [[:a, :b], [:c, :d]]
    
    [0, 1, 2, 3, 4, 5].each_slice(2).to_a
    #=> [[0, 1], [2, 3], [4, 5]]
    

    【讨论】:

      【解决方案2】:
      Hash[*[:a, :b, :c, :d]].to_a
      

      【讨论】:

      • 聪明,但它不保留顺序。
      • 确实如此(至少在 Ruby 1.9.2dev 中)。
      • 如果碰巧有重复的密钥,它也会失败。 Hash[*[:a,:b,:c,:d,:a,:e]]
      • 如果数组的长度不能被 2 整除,也会失败。 - Hash[*[1,2,3]].to_a 失败 [1,2,3].each_slice(2).to_a 不会
      猜你喜欢
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2019-05-01
      • 1970-01-01
      • 2013-09-16
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多