【发布时间】:2012-11-09 05:51:35
【问题描述】:
我有一个map,它要么更改一个值,要么将其设置为 nil。然后我想从列表中删除 nil 条目。该列表不需要保留。
这是我目前拥有的:
# A simple example function, which returns a value or nil
def transform(n)
rand > 0.5 ? n * 10 : nil }
end
items.map! { |x| transform(x) } # [1, 2, 3, 4, 5] => [10, nil, 30, 40, nil]
items.reject! { |x| x.nil? } # [10, nil, 30, 40, nil] => [10, 30, 40]
我知道我可以做一个循环并有条件地收集到另一个数组中,如下所示:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
但这似乎不是惯用的。有没有一种很好的方法可以将函数映射到列表上,随时删除/排除 nil?
【问题讨论】:
-
Ruby 2.7 引入了
filter_map,这似乎很适合这个。省去了重新处理数组的需要,而不是第一次就可以根据需要得到它。 More info here. -
数组也有紧凑的
标签: ruby