我有以下哈希数组:
persons = [
{name: 'Mark', age: 28},
{name: 'John', age: 45},
{name: 'Sam', age: 34},
{name: 'John', age: 34}
]
我想获得密钥name
的一系列唯一值。在这种情况下,它应该是['Mark', 'John', 'Sam']
。
这是我的解决方案:
names = []
persons.each do |person|
names << person[:name] unless names.include? person[:name]
end
有更好的方法吗?
答案 0 :(得分:4)
您可以合并map
和uniq
:
persons = [
{name: 'Mark', age: 28},
{name: 'John', age: 45},
{name: 'Sam', age: 34},
{name: 'John', age: 34}
]
persons.map { |p| p[:name] }.uniq #=> ["Mark", "John", "Sam"]
答案 1 :(得分:2)
此外,您可以在此处使用Set
:
require 'set'
persons.each_with_object(Set.new) { |person, set| set << person[:name] }.to_a
#=> ["Mark", "John", "Sam"]
或者使用hash:
persons.group_by { |p| p[:name] }.keys
#=> ["Mark", "John", "Sam"]