3

map有没有同时使用和(select或)的好方法delete_if?目前,我执行以下任一操作,但想知道是否有更好的方法。此外,如果我想要结果数组中的假值,我不能使用第二个。

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

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

2 回答 2

2

减少或注入几乎相同

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

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

于 2012-03-22T00:19:15.477 回答
2

这个怎么样?

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

每当我考虑映射然后选择或映射然后拒绝等时,这通常意味着我可以使用可枚举来完成工作。

于 2012-03-22T00:00:31.300 回答