如何从散列数组中获取键的所有值?

时间:2015-12-31 10:36:17

标签: arrays ruby hash

我有一系列哈希 -

[{"id"=>1,
  "name"=>"Bose Headphones",
  "created_at"=>"2015-11-25T10:40:29.120Z",
  "updated_at"=>"2015-11-25T10:40:29.120Z",
  "description"=>"Bose",
  "active"=>true},
 {"id"=>3,
  "name"=>"test topic",
  "created_at"=>"2015-11-30T14:34:03.087Z",
  "updated_at"=>"2015-11-30T14:34:03.087Z",
  "description"=>"test",
  "active"=>true},
 {"id"=>4,
  "name"=>"Wireless Mouse",
  "created_at"=>"2015-11-30T14:35:16.583Z",
  "updated_at"=>"2015-11-30T14:35:16.583Z",
  "description"=>"WM",
  "active"=>true},
 {"id"=>5,
  "name"=>"Fit Band",
  "created_at"=>"2015-12-01T04:39:03.034Z",
  "updated_at"=>"2015-12-01T04:39:03.034Z",
  "description"=>"Fitness Band",
  "active"=>true}]

我想获取数组中的所有名称值,然后使用.sample从列表中获取我想要的任何数字。 我正在尝试的方式是 -

arr = []
arr = arrOfHash.map{|x| "#{x['name']}"}.sample(1)

这是给我的

  

当多个'值时,值不能是数组。属性不存在。不   一个数组(ArgumentError)

3 个答案:

答案 0 :(得分:1)

我已对此进行了测试,似乎按预期工作了!

arrOfHashes.map{|i| i["name"]}.sample(1)

答案 1 :(得分:1)

您可以跳过map并从随机哈希中获取"name"

arrOfHash.sample['name']

答案 2 :(得分:0)

红宝石中有一种名为vine的宝石,可让您根据键访问值。 我会做类似的事情(假设上面的数组名称是array_of_hashes)

require 'vine'
name_list = []
array_of_hashes.each do |hash|
   name_list << hash.access("name")
end
puts "All the extracted names from array #{name_list}"