我正在使用以下代码映射数组:
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 值,它的意思是,我想得到一个数组......:/ / p>
["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个值。
谢谢
答案 0 :(得分:9)
您可以调用Array上的compact
方法从中删除空结果。
images_url = page.images.map{|img| img.url.to_s if (img.width.to_i > 200)}.compact
答案 1 :(得分:0)
如果您想删除nil
以外的内容而不修改接收者,也可以使用Array#delete(如果您想要,请添加一个[!
]。
或者,如果您想根据匹配以外的其他内容删除元素,则可以使用Array#delete_if。它使用您提供的块迭代每个元素,如果该块的返回值的计算结果为true
,则删除该元素。
以下是两个例子:
ary = [42, nil, "foo", "bar", "foo", Object.new, self, /hi/] ary.delete("foo") #=> [42, nil, 'bar', #<Object:xxxxx&rt, main, /hi/] ary #=> [42, nil, "foo", "bar", "foo", Object.new, self, /hi/] ary.delete_if {|elem| elem.class == Object or elem.kind_of?(Regexp) } #=> [42, nil, "foo", "bar", "foo"]
希望这有帮助! :)