我有一系列哈希:
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}
答案 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