给定数组的哈希值:
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
我该如何做到这一点?
答案 0 :(得分:2)
a.transform_values(&:uniq) #=> {:b=>[:x, :y], :c=>[:x, :z]}
或transform_values!
就地修改。这两种方法都需要Ruby> = 2.4。
使用map
用于Ruby< 2.4。
a.map { |k,arr| [k,arr.uniq] }.to_h #=> {:b=>[:x, :y], :c=>[:x, :z]}
答案 1 :(得分: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]}