如何从哈希数组中获取项目?

时间:2014-05-05 14:06:31

标签: ruby

我有一系列哈希:

my_array = [
{
    :id => 1,
    :nome => "Bill"
},
{
    :id => 2,
    :nome => "Joe"
},
{
    :id => 3,
    :nome => "Bob"
}

如何获取传递ID的项目,例如,将3作为'id'我想获得哈希:{"id": 3, "nome": "Bob"}

我发现答案,使用方法“.select”如下:

my_array.select {| a | a [:id] == 1}

2 个答案:

答案 0 :(得分:3)

你拥有的是一个JSON字符串。您需要先将其解析为哈希数组,然后使用Enumerable#find来获取项目:

require 'json'

test = '[
 {
  "id": 1,
  "nome": "Bill"
 },
 {
   "id": 2,
   "nome": "Joe"
 },
 {
   "id": 3,
   "nome": "Bob"
 }
]'

# Parse into an array of hashes
hashes = JSON.parse(test)

foundItem = hashes.find { |item| item["id"] == 3}
puts foundItem 

答案 1 :(得分:0)

由于它看起来像jSON,如果它是Hash es的实际数组,你应该如上解析

 arr = [{"id" => 1,"nome"=> "Bill"},{"id"=> 2,"nome"=> "Joe"},{"id"=> 3,"nome"=> "Bob"}]
 arr.select{|h| h["id"] == 3}
 #=>[{"id"=> 3,"nome"=> "Bob"}]

这将返回所有匹配Array

Hash

要获得单个值,您可以使用

 arr.select{|h| h["id"] == 3}.pop
 #=>{"id"=> 3,"nome"=> "Bob"}

将返回最后一个匹配的Hash或@KalmanHazins声明的

arr.find{|h| h["id"] == 3}
#=>{"id"=> 3,"nome"=> "Bob"}

将根据当前订单返回匹配的第一个Hash