2014-02-24 106 views
3

我使用散列來存儲解析網站所需的一些小數據,包括URL和使用Nokogiri解析網站標題的具體說明。然而,我使用的嵌套哈希被解釋爲一個數組。嵌套散列解釋爲陣列

webSite = { :everdoH => 
         { :url => "http://www.everardoherrera.com/" , 
          :instruc=> Proc.new PageToParse.css('.contentheading').css('.contentpagetitle')} 
      } 

如果我做的:

puts webSite.class 
webSite.each {|aSite| puts aSite.class } 

的我得到這個:

>> Hash 
>> Array 

所以我不能使用任何哈希索引屬性。

任何想法,爲什麼我沒有獲得類型哈希嵌套部分?

回答

2

因爲Hash#each,Hash#each_pair傳遞鍵值對(數組)作爲參數。

webSite = { :everdoH => 
    { :url => "http://www.everardoherrera.com/" , 
    :instruc=> 'blah' 
    } 
} 
webSite.each { |aSite| p aSite } 
# => [:everdoH, {:url=>"http://www.everardoherrera.com/", :instruc=>"blah"}] 

嘗試下列條件之一(印刷類的價值,而不是鍵值對):

webSite.each {|aSite| puts aSite[1].class } 
# => Hash 
webSite.each {|key, aSite| puts aSite.class } 
# => Hash 
webSite.each_value {|aSite| puts aSite.class } 
# => Hash 
+0

webSite.each_value {| aSite |把aSite.class}給我最好的結果。現在它被識別爲散列,現在我可以使用鍵值來訪問嵌套的散列數據。 –

0

使用each_pair迭代

1.9.3p448 :060 > webSite.each_pair{|x,y| p y.class} 
Hash 
=> {:everdoH=>{:url=>"http://www.everardoherrera.com/", :instruc=>"asd"}} 
1.9.3p448 :061 > 
1.9.3p448 :062 > webSite.each_pair{|x,y| p y} 
{:url=>"http://www.everardoherrera.com/", :instruc=>"asd"} 
=> {:everdoH=>{:url=>"http://www.everardoherrera.com/", :instruc=>"asd"}} 
1.9.3p448 :063 > 
1.9.3p448 :064 > webSite.each_pair{|x,y| p x} 
:everdoH 
=> {:everdoH=>{:url=>"http://www.everardoherrera.com/", :instruc=>"asd"}} 
1.9.3p448 :065 >