Ruby - 哈希数组,获得唯一值

时间:2017-08-26 17:24:09

标签: arrays ruby dictionary hash functional-programming

我有以下哈希数组:

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以合并mapuniq

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