在数组的哈希上使用uniq

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在数组的哈希上使用uniq相关的知识,希望对你有一定的参考价值。

给定数组的哈希:

a =
{:b => [:x, :x, :y], :c => [:x, :z, :z]}

我想从散列中的数组中删除所有重复项。

预期结果:

a
# => {:b => [:x, :y], :c => [:x, :z]}

什么行不通:

a.each { |e| e.uniq! }

也不是:

a.each { |e| e = e.uniq } # should be the same as above, really

我怎么能做到这一点?

答案

Hash#transform_values

a.transform_values(&:uniq) #=> {:b=>[:x, :y], :c=>[:x, :z]}

transform_values!就地修改。两种方法都需要Ruby> = 2.4。

Array#map

使用map for Ruby <2.4。

a.map { |k,arr| [k,arr.uniq] }.to_h #=> {:b=>[:x, :y], :c=>[:x, :z]}
另一答案

如果要为每个哈希值创建一个新数组,那么@ SagarPandya的答案将起作用,但您也可以对该数组进行就地修改。

a = {:b => [:x, :x, :y], :c => [:x, :z, :z]}

a.each_value(&:uniq!) # => {:b=>[:x, :y], :c=>[:x, :z]}
a # => {:b=>[:x, :y], :c=>[:x, :z]}

以上是关于在数组的哈希上使用uniq的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

下文中的哈希片段指的是啥?

hash 在 perl 中的用法(转载)

为啥哈希表在存储桶的数组上使用链表?

从 perl 数组/哈希打印信息

哈希表 - 链表数组 - C++