嵌套哈希解释为数组

时间:2014-02-24 02:59:57

标签: ruby-on-rails ruby arrays hash

我正在使用哈希来存储解析网站所需的一些数据,包括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?

2 个答案:

答案 0 :(得分:2)

因为Hash#eachHash#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 >