在循环中追加ruby数组时拒绝nil值

时间:2014-11-20 12:43:53

标签: ruby

我有一个循环,我将循环的结果附加到数组。代码就像这样

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?

3 个答案:

答案 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