0

例如,我有一组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, ...},..],
              ...
            ]

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

4

1 回答 1

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但这很简单。

于 2012-08-21T11:33:59.090 回答