从ruby数组if条件中获取值



我正在用以下代码映射一个数组:

url = "http://www.cnn.com"
page = Mechanize.new.get(url)
images_url = page.images.map{|img| img.url.to_s if (img.width.to_i > 200)}

我在控制台中得到这个结果:

[nil, "http://i2.cdn.turner.com/cnn/dam/assets/110929092349-nelson-mandela-t1-main.jpg", nil, nil, nil, nil, nil, "http://i2.cdn.turner.com/cnn/dam/assets/120225123812-syria-mani-2-c1-main.jpg", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, "http://i2.cdn.turner.com/cnn/dam/assets/120225022127-blue-fish-bin-tease.jpg", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

我想要得到一个没有nil值的数组,它的意思是,我想要一个类似的数组

["http://i2.cdn.turner.com/cnn/dam/assets/110929092349-nelson-mandela-t1-main.jpg", "http://i2.cdn.turner.com/cnn/dam/assets/120225123812-syria-mani-2-c1-main.jpg", "http://i2.cdn.turner.com/cnn/dam/assets/120225022127-blue-fish-bin-tease.jpg"]

对于这种情况,有3个值

感谢

您可以调用Array上的compact方法来从中删除空结果。

images_url = page.images.map{|img| img.url.to_s if (img.width.to_i > 200)}.compact

如果您想删除nil以外的东西,也可以使用Array#delete,而无需修改接收器(如果您想的话,添加一个bang[!]。

或者,如果要删除基于匹配以外的其他元素,可以使用Array#delete_if。它使用您提供的块迭代每个元素,如果该块的返回值计算为true,则删除该元素。

以下是两者的一些例子:

ary=[42,nil,"foo","bar","foo",Object.new,self,/hi/]ary.delete("foo")#=>[42,nil,'bar',#&lt对象:xxxxx&rt,main,/hi/]ary#=>[42,nil,"foo","bar","foo",Object.new,self,/hi/]ary.delete_if|elem.class==对象或elem.kind_of?(Regexp)}#=>[42,nil,"foo","bar","foo"]

希望这能有所帮助!:)

最新更新