是否有一个很好的方式来map
和(select
或delete_if
)在同一时间?目前,我做了以下任一项,但想知道是否有更好的方法。另外,如果我想在结果数组中使用一个falsy值,我不能使用第二个。映射和选择在同一时间
some_array.select{|x| some_condition(x)}.map{|x| modification(x)}
some_array.map{|x| modification(x) if some_condition(x)}.compact
是否有一个很好的方式来map
和(select
或delete_if
)在同一时间?目前,我做了以下任一项,但想知道是否有更好的方法。另外,如果我想在结果数组中使用一个falsy值,我不能使用第二个。映射和选择在同一时间
some_array.select{|x| some_condition(x)}.map{|x| modification(x)}
some_array.map{|x| modification(x) if some_condition(x)}.compact
几乎相同,以减少或注入
new_array = some_array.each_with_object([]) do |m,res|
res << modification(x) if some_condition(x)
end
不同的是,你不需要把结果在块的结尾。
这个怎么样?
new_array = some_array.inject([]) do |arr, x|
some_condition(x) ? arr << modification(x) : arr
end
每当我想到测绘然后选择或映射然后拒绝等等,这通常意味着我可以使用enumerable来完成这项工作。
嗯,很好的解决方案! – Jwosty 2012-03-22 00:01:50
类似的问题:http://stackoverflow.com/questions/5152098/skip-over-iteration-in-enumerablecollect但没有很好的答案。 – 2012-03-22 01:32:04
可能的重复[在Ruby中,是否有一个数组方法,结合'选择'和'地图'?](http://stackoverflow.com/questions/3371518/in-ruby-is-there-an-array-method -that-combine-select-and-map) - 有更好的答案 – fotanus 2014-06-26 02:54:26