0

質問は主にタイトルにあります:

与えられた配列

array = [{x: 1, y: "jacksonville"}, 
        {x: 2, y: "atlanta"}, 
        {x: 1, y: "tampa"}, 
        {x: 2, y: "atlanta"},
        {x: 2, y: "jacksonville"},
        {x: 2, y: "miami"}, ]

次の結果を達成するための良い方法は何ですか

array = [{x: 3, y: "jacksonville",
         {x: 4, y: "atlanta"},
         {x: 1, y: "tampa"},
         {x: 2 ,y: "miami"}]

入力は、私が実際に作業しているものの単純化されたバージョンですが、ご覧のとおり、y 値の重複を削除しようとしていますが、x 値は保持しています。黒を Hash#merge に渡しますが、すべてのハッシュを互いに比較したり、重複を見つけたりするのが困難です。パフォーマンスの高いソリューションを探しています。

4

2 に答える 2

0

まず、y データにインデックスを付ける便利な方法を作成する必要があります。そのためにハッシュを使用します。

h = array.inject({}) do |ret, item|
   ret[item[:y]] ||= 0 # initialize each item
   ret[item[:y]] += item[:x] # increment count
   ret # return the hash
end

このハッシュがあれば、新しい配列を生成できます。

h.map {|key, value| {x: value, y: key}}
于 2013-06-14T20:52:56.050 に答える