我有一个循环,我将循环的结果附加到数组。代码就像这样
urls = []
series_id = [100,200,300,400]
series_id.each do |id|
result_urls += iterate_id_and_get_urls(id)
end
def iterate_id_and_get_urls(id)
#do something with id and maps it and returns its url which would result in an array
#return that url array
end
但是iterate_id_and_get_urls(id)有时也会返回nil,这会导致nil被追加到result_urls中。我怎么能避免这种情况。我正在寻找类似下面的内容
result_urls += iterate_id_and_get_urls(id) unless nil?
答案 0 :(得分:3)
如何使用flat_map
:
result_urls = series_id.flat_map { |id| iterate_id_and_get_urls(id) }.compact
甚至:
result_urls = series_id.flat_map { |id| iterate_id_and_get_urls(id) || [] }
答案 1 :(得分:2)
您可以尝试类似
的内容series_id.each do |id|
if value = iterate_id_and_get_urls(id)
result_urls += value.compact
end
end
因此nil
网址不会添加到result_urls
Compact :返回self
的副本,其中所有nil
个元素已移除。
答案 2 :(得分:1)
series_id.map( &method( :iterate_id_and_get_urls ) ).compact.reduce( [], :+ ).compact