2016-06-22 251 views
-2

我有这样一个哈希:哈希散列与阵内哈希

document = { 
    "results" => {[ 
    {"ip" => 10, "host" => 12}, 
    {"ip" => 13, "host" => 17} 
    ]} 
} 

这是一个项目散列与哈希散列内的数组。我指定了一个值ip = 10

如果ip大于10,我想要打印两个带有值的键。这个散列非常复杂,我不知道如何访问这些值。你可以帮我吗?

编辑: 如果我有这样的散列 document = { "results" => [{"ip" => 10, "host" => 12, "temp" => yes},{"ip" => 13, "host" => 17, "temp" => yes}] },并希望打印ip和主机后匹配ip与10?

+1

是否有任何理由你使用散列? –

+1

该表达式无效。 – sawa

+1

@sawa在说什么是结果=> {[hash,hash]}部分。它应该是'“结果”=> [散列,散列]' –

回答

1
document["results"].each do |result| 
    if result["ip"] > 10 
    puts result # will print ip and host 
    end 
end 
1

我会使用select

document = { "results" => [{"ip" => 10, "host" => 12},{"ip" => 13, "host" => 17}] } 

puts document['results'].select { |hash| hash['ip'] > 10 } 
#=> {"ip"=>13, "host"=>17} 

说明:

document['results'] 

返回散列的数组:

[{"ip" => 10, "host" => 12},{"ip" => 13, "host" => 17}] 

在下一步骤select是在th称为在返回的数组:

document['results'].select { |hash| hash['ip'] > 10 } 

这将返回所有子散列与分配给该键的'ip'> 10

puts只是打印结果STDOUT

+0

它的工作原理!谢谢:)你能解释一步一步吗?我想了解它的未来。 – mila002

+0

@ mila002:增加了一个解释。 – spickermann

+0

好的,谢谢你:) – mila002

0

今天我有一个问题。这里是我的代码:

require 'rubygems' 
require 'json' 

document = JSON.load File.new("hosts.txt") 
file = JSON.load File.new("admins.txt") 

first_table = document["results"] 
second_table = file["admins"] 
new_one = first_table | second_table 

的第一个散列看起来是这样的:

document = { "results" => [{"ip" => 10, "host" => 12},{"ip" => 13, "host" => 17}] } 

第二哈希是

file = { "admins" => [{"host" => 12, "name" => 12},{"host" => 17, "name" => 17}] } 

我想用相同的值合并这两个哈希值由主机匹配他们得到

{ "new_one" => [{"ip" => 10, "host" => 12, "name" => 12}, {"ip" => 13, "host" => 17}, "name" => 17] 

当我尝试new_one = first_table | second_table它说test.rb:24:在<main>': undefined method |'为#Hash:0x00000002ca8be8(NoMethodError),当我尝试new_one = first_table.merge(second_table)其说test.rb:26:在<main>': undefined method合并'#Array:0x00000002ce88b0(NoMethodError)。那么这些散列有什么问题呢?有一次他们是哈希,第二次是数组?如何加快这些哈希?两个哈希中的主键和值相同。