问题主要在标题中:
给出一个数组
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两次哈希,但我很难将所有哈希值相互比较或找到重复项。寻找高性能的解决方案。
答案 0 :(得分:3)
下面:
array.group_by{|e|e[:y]}.map{|k,v|{x:v.reduce(0){|a,b|a+b[:x]},y:k}}
答案 1 :(得分:0)
首先,您必须创建一种方便的方法来索引y数据。我会使用Hash:
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
有了这个Hash,你可以生成新的数组:
h.map {|key, value| {x: value, y: key}}