Ruby - 根据某些条件从数组中选择修改后的值

时间:2014-01-24 19:04:58

标签: ruby ruby-1.8.7

我知道如何在Ruby中选择,收集和映射工作。我只是想知道是否有一个类似的原生Ruby方法可以将它们结合起来&在一次迭代中给出结果而不需要从数组中删除nil?

对于前。

(1..10).map { |x| x*3 if x.even? }.compact
(1..10).select { |x| x.even? }.map{ |x| x*3 }
(1..10).select { |x| x.even? }.collect{ |x| x*3 }

都给出相同的结果,即[6,12,18,24,30]。但是'some_method'会给出相同的结果吗?

(1..10).some_method { |x| x*3 if x.even? }  ## evaluates to [6, 12, 18, 24, 30]

2 个答案:

答案 0 :(得分:2)

Enumerable#each_with_object

(1..10).each_with_object([]) { |x,arr| arr.push(x*3) if x.even? }  ## evaluates to [6, 12, 18, 24, 30]

答案 1 :(得分:1)

你可以使用reduce:

(1..10).reduce([]){ |a,x| a << x*3 if x.even?; a }

或(等同,同样令人困惑):

(1..10).reduce([]){ |a,x| x.even? ? a << x*3 : a }