我正在使用哈希来存储解析网站所需的一些数据,包括URL和使用Nokogiri解析网站标题的具体说明。但是我使用的嵌套Hash被解释为数组。
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
因此我无法使用任何哈希索引属性。
我知道为什么我没有在嵌套部分上获得类类型Hash?
答案 0 :(得分: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
答案 1 :(得分: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 >