当条件不满足时,如何让这个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?}
答
你可以试试:
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
这是很好,优雅的作品!谢谢。 – marcamillion 2012-04-18 22:01:39
它会通过你的列表两次。一个用#map,另一个用#reject。尽管小列表很好。 – allenhwkim 2012-04-18 22:11:33
甚至更简洁:'list.reject!(&:nil?)' – Phrogz 2012-04-18 23:25:57