【问题标题】:Reorder, reindex array of objects by a property按属性重新排序,重新索引对象数组
【发布时间】:2012-08-16 17:12:36
【问题描述】:

例如,我有一个地图数组 arr

arr == [  { pos => [0,0], color => :red, ... },
          { pos => [0,1], color => :green, ...},
          { pos => [1,0], color => :fuchsia, ...},
          { pos => [1,1], color => :red, ...},
          ...
       ]

在哪里

arr.map { |item| item.pos }

形成整数范围 [0..n] x [0..m] 的笛卡尔积

我很乐意通过元素的第一个坐标来访问它们!所以使用类似的东西

`newArr` == [
              [{ second_coord => 0, color => :red...}, { second_coord => 1, color => :green,...}, .. ],
              [{ second_coord => 0, color => :fuchsia,...}, { second_coord => 1, color => :red, ...},..],
              ...
            ]

因为如果我可以像这样访问它,我相信我可以非常优雅且可读地编辑我的代码。如果转换简短易读,或者至少简短。有什么提示吗?

【问题讨论】:

    标签: ruby arrays standard-library


    【解决方案1】:

    这应该可以解决问题:

    new_array = arr.inject([]) |res, e| do 
                   res[e.pos[0]] ||= []  # this row maybe not required
                   res[e.pos[0]] << {second_coord => e.pos[1], color => e.color } 
                end
    

    您可能希望根据second_coord 对内部数组进行排序,但这很简单。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2019-12-10
      • 1970-01-01
      • 2016-08-03
      • 2020-04-11
      • 2021-01-25
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多