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 に答える