Arrays Ruby——哈希数组,获取唯一值
我有以下哈希数组:Arrays Ruby——哈希数组,获取唯一值,arrays,ruby,dictionary,hash,functional-programming,Arrays,Ruby,Dictionary,Hash,Functional Programming,我有以下哈希数组: persons = [ {name: 'Mark', age: 28}, {name: 'John', age: 45}, {name: 'Sam', age: 34}, {name: 'John', age: 34} ] 我想为键名获取一个唯一值数组。在这种情况下,它应该是['Mark','John','Sam'] 以下是我的解决方案: names = [] persons.each do |person| names << person
persons = [
{name: 'Mark', age: 28},
{name: 'John', age: 45},
{name: 'Sam', age: 34},
{name: 'John', age: 34}
]
我想为键名获取一个唯一值数组。在这种情况下,它应该是['Mark','John','Sam']
以下是我的解决方案:
names = []
persons.each do |person|
names << person[:name] unless names.include? person[:name]
end
有更好的方法吗?您可以将map和uniq结合使用:
此外,您还可以在此处使用Set:
无法保证将集合转换为数组将提供所需的名称顺序。但是,您可以使用散列。或persons.collect{p | p[:name]}.to_set.to_a@CarySwoveland,关于顺序没有任何疑问:不过,这里还有一个使用哈希的替代解决方案。
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"]
require 'set'
persons.each_with_object(Set.new) { |person, set| set << person[:name] }.to_a
#=> ["Mark", "John", "Sam"]
persons.group_by { |p| p[:name] }.keys
#=> ["Mark", "John", "Sam"]