【发布时间】:2011-06-17 23:47:42
【问题描述】:
我觉得这可以改进(在 ruby 中很常见)。我正在尝试根据值对哈希数组进行 uniq。在这个例子中,我想要元素的颜色。苔藓和雪是冒名顶替者。
# remove unique array of hashes based on a hash value
a = [
{ :color => "blue", :name => "water" },
{ :color => "red", :name => "fire" },
{ :color => "white", :name => "wind" },
{ :color => "green", :name => "earth" },
{ :color => "green", :name => "moss" },
{ :color => "white", :name => "snow" }
]
# remove moss and snow
uniques = []
a.each_with_index do |r, i|
colors = uniques.collect {|e| e[:color]}
if !colors.include? r[:color]
uniques.push r
else
a[i] = nil
end
end
a.compact!
puts a
这将打印出来
{:color=>"blue", :name=>"water"}
{:color=>"red", :name=>"fire"}
{:color=>"white", :name=>"wind"}
{:color=>"green", :name=>"earth"}
这是“正确的”,但我觉得这太过分了。我对 .map .inject 的经验是有限的,那些先进的技术让我望而却步。如果有人可以重新考虑这一点,它可能会帮助我理解另一种简洁的技术。
【问题讨论】:
标签: ruby