gpt4 book ai didi

ruby - 基于值的哈希数组是唯一的

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:48 25 4
gpt4 key购买 nike

我觉得这可以改进(在 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 1.9 中,尝试以下操作

a.uniq! {|e| e[:color] }

关于ruby - 基于值的哈希数组是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4841187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com