2016-06-22 165 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)。那麼這些散列有什麼問題呢?有一次他們是哈希,第二次是數組?如何加快這些哈希?兩個哈希中的主鍵和值相同。