如何仅根据键从哈希数组中删除重复项?

发布于 2024-11-03 15:51:30 字数 261 浏览 0 评论 0原文

您将如何根据删除重复项?

values = [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}]

如何忽略该值并基于 key 运行 uniq 以便它返回:

[{'a' => '1'}, {'b' => '1'}]

How would you go about removing duplicates based on the key?

values = [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}]

How can I ignore the value and run uniq based on key so that it returns:

[{'a' => '1'}, {'b' => '1'}]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

自在安然 2024-11-10 15:51:30

假设您不关心哪个值被破坏,只需将它们运行到哈希中(它确实具有唯一的键,因此可能是这种情况下正确的集合类):

h = {}
values.each{|i|i.each{|k,v|h[k] = v}}
puts h # => {"a"=>"4", "b"=>"1"}

...或者如果您想要每个键的第一个:

h = {}
values.each{|i|i.each{|k,v|h[k] = v unless h[k]}}

如果你想返回一个数组:

h.each{|k,v|a << {k=>v}}

Assuming you don't care which value gets clobbered, just run them into a hash (which does have unique keys and is therefore probably the right collection class for this case):

h = {}
values.each{|i|i.each{|k,v|h[k] = v}}
puts h # => {"a"=>"4", "b"=>"1"}

... or if you want the first of each key:

h = {}
values.each{|i|i.each{|k,v|h[k] = v unless h[k]}}

If you want to get back to a Array:

h.each{|k,v|a << {k=>v}}
清晰传感 2024-11-10 15:51:30

以下内容仅适用于 ruby​​ 1.9,因此可能没用。

Hash[values.map(&:first).reverse].map{|a| Hash[*a]}

如果您需要按原来的顺序,

values & Hash[values.map(&:first).reverse].map{|a| Hash[*a]}

The following will work only in ruby 1.9, so it might be useless.

Hash[values.map(&:first).reverse].map{|a| Hash[*a]}

If you need it in the original order,

values & Hash[values.map(&:first).reverse].map{|a| Hash[*a]}
◇流星雨 2024-11-10 15:51:30

在不引入任何中间变量的情况下,下面的 1 行将达到目的:

> [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}].inject({}) {|s,h| s.merge(h) unless s.keys.include? h.keys}.inject([]) {|s,h| s << {h[0]=>h[1]}}
 => [{"a"=>"4"}, {"b"=>"1"}]

Without introducing any intermediate variables the following 1 liner will do the trick:

> [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}].inject({}) {|s,h| s.merge(h) unless s.keys.include? h.keys}.inject([]) {|s,h| s << {h[0]=>h[1]}}
 => [{"a"=>"4"}, {"b"=>"1"}]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文