如何在ruby中将数组中的每个数字乘以2

时间:2017-07-06 03:04:23

标签: ruby

我有一个包含字符,数字和浮点值的数组。

 a[] = {'a',2,2.5}

我必须将每个整数乘以2并且不要对字符进行操作。

我的解决方案 -

def self.double_numbers(input)
        input.map do |input_element|
            if input_element.is_a? Integer
                input_element.to_i * 2
            elsif input_element.is_a? Float
                input_element.to_Float * 2
            end
        end
    end

输入

无效
   a[] = {'a',2,2.5}

它正在返回

  

0 4 4

2 个答案:

答案 0 :(得分:4)

您可以使用map并对数组中的每个元素检查是否为Numeric,如果是,则将其乘以2,然后您可以压缩nil值的结果:

p ['a', 2, 2.5].map{|e| e * 2 if e.is_a? Numeric}.compact
# => [4, 5.0]

如果您想要保留那些不会应用*2操作的元素,那么:

p ['a', 2, 2.5].map{|e| e.is_a?(Numeric) ? e * 2 : e}

此外,您可以使用grep来简化检查,然后映射您的唯一数字值:

p ['a', 2, 2.5].grep(Numeric).map{|e| e*2}
# => [4, 5.0]

我不知道这样做的副作用,但看起来不错(当然如果输出不仅仅是Numeric对象):

class Numeric
  def duplicate
    self * 2
  end
end

p ['a', 2, 2.5].grep(Numeric).map(&:duplicate)

或者:

p ['a', 2, 2.5].grep(Numeric).map(&2.method(:*))
# [4, 5.0]

答案 1 :(得分:2)

  

我必须乘以每个整数并浮动2并且不应该进行任何操作   在角色上完成。

你去:

> a = ["a", 2, 2.5]
> a.map{|e| e.is_a?(Numeric) ? e * 2 : e}
#=> ["a", 4, 5.0]

注意: a[] = {'a',2,2.5}不是数组的正确语法。