在数组的哈希上使用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
我怎么能做到这一点?
答案
a.transform_values(&:uniq) #=> {:b=>[:x, :y], :c=>[:x, :z]}
或transform_values!
就地修改。两种方法都需要Ruby> = 2.4。
使用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的主要内容,如果未能解决你的问题,请参考以下文章