Ruby - extracting the unique values per key from a

2019-02-06 19:56发布

From a hash like the below one, need to extract the unique values per key

array_of_hashes = [ {'a' => 1, 'b' => 2 , 'c' => 3} , 
                    {'a' => 4, 'b' => 5 , 'c' => 3}, 
                    {'a' => 6, 'b' => 5 , 'c' => 3} ]

Need to extract the unique values per key in an array

unique values for 'a' should give

[1,4,6]

unique values for 'b' should give

[2,5]

unique values for 'c' should give

[3]

Thoughts ?

标签: ruby arrays hash
2条回答
We Are One
2楼-- · 2019-02-06 20:37

Use Array#uniq:

array_of_hashes = [ {'a' => 1, 'b' => 2 , 'c' => 3} , 
                    {'a' => 4, 'b' => 5 , 'c' => 3}, 
                    {'a' => 6, 'b' => 5 , 'c' => 3} ]

array_of_hashes.map { |h| h['a'] }.uniq    # => [1, 4, 6]
array_of_hashes.map { |h| h['b'] }.uniq    # => [2, 5]
array_of_hashes.map { |h| h['c'] }.uniq    # => [3]
查看更多
够拽才男人
3楼-- · 2019-02-06 20:38

This is more generic:

options = {}
distinct_keys = array_of_hashes.map(&:keys).flatten.uniq
distinct_keys.each do |k|
  options[k] = array_of_hashes.map {|o| o[k]}.uniq
end
查看更多
登录 后发表回答