当条件不满足时,如何让这个2D数组赋值不在元素中存储'nil'?

问题描述:

因此,我正在使用Nokogiri浏览页面上的链接列表,并将所有链接推送到2D数组中。问题在于它在我不想要的某些元素中推动nil当条件不满足时,如何让这个2D数组赋值不在元素中存储'nil'?

我该如何强制它跳过零的元素,所以我的数组只有链接而不是一些链接和一些零值?

见代码:

url = 'http://www.craigslist.org/about/sites' 

def my_list(url) 
    root = Nokogiri::HTML(open(url)) 
    list = root.css("a").map do |link| 
     if link[:href] =~ /http/ 
      [link.text, link[:href]] 
     end   
    end 
end 

的思考?

P.S.我试过if link[:href].nil?,但我不确定如何告诉它跳过那个特定的link元素。

您可以后处理的列表,如根似乎并不支持所有的采集方法,试试这个在您的方法的最后把它清理干净。它会放弃所有的零。

list = list.reject {|x| x.nil?} 
+0

这是很好,优雅的作品!谢谢。 – marcamillion 2012-04-18 22:01:39

+0

它会通过你的列表两次。一个用#map,另一个用#reject。尽管小列表很好。 – allenhwkim 2012-04-18 22:11:33

+2

甚至更​​简洁:'list.reject!(&:nil?)' – Phrogz 2012-04-18 23:25:57

你可以试试:

list = root.css("a").reject!{|l| l[:href].nil?}.map do | link | 
+0

这似乎有点太冗长和尴尬....保罗建议一个更优雅的方式。感谢您的努力! – marcamillion 2012-04-18 22:02:33

+0

这是在同一行中使用的相同方法 – tommasop 2012-04-18 22:17:19