Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Ruby——哈希数组,获取唯一值_Arrays_Ruby_Dictionary_Hash_Functional Programming - Fatal编程技术网

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