在数组的哈希上使用uniq

问题描述 投票:0回答:2

给定数组的哈希:

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

我怎么能做到这一点?

ruby hash
2个回答
2
投票

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]}

2
投票

如果要为每个哈希值创建一个新数组,那么@ 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]}
© www.soinside.com 2019 - 2024. All rights reserved.