同时映射和选择

时间:2012-03-21 23:42:42

标签: ruby arrays map enumerable ruby-1.9.3

同时有map和(selectdelete_if)的好方法吗?目前,我做了以下任何一种,但想知道是否有更好的方法。另外,如果我想在结果数组中输入一个假值,我就不能使用第二个。

some_array.select{|x| some_condition(x)}.map{|x| modification(x)}

some_array.map{|x| modification(x) if some_condition(x)}.compact

2 个答案:

答案 0 :(得分:2)

这个怎么样?

new_array = some_array.inject([]) do |arr, x|
  some_condition(x) ? arr << modification(x) : arr
end

任何时候我想到映射然后选择或映射然后拒绝等...,这通常意味着我可以使用enumerable来完成工作。

答案 1 :(得分:2)

减少或注入几乎相同

new_array = some_array.each_with_object([]) do |m,res|
  res << modification(x) if some_condition(x)
end

不同之处在于您不需要将结果放在块的末尾。