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

标签 ruby

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

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

我必须将每个整数和 float 乘以 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

最佳答案

您可以使用 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]

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

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]

关于ruby - 如何在ruby中将数组中的每个数字乘以2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44939123/

相关文章:

Ruby:扩展模块的类

mysql - 如何在 Rails 中表达多表连接

mysql - Rails 尝试插入时找不到用户记录

ruby - sleep() 对于作业调度应用程序的主循环来说是个好主意吗

ruby-on-rails - 在 ActiveRecord 中使用范围返回多个 DateTime 范围内的结果

ruby-on-rails - 如何在 ruby​​ 递归调用期间保持值(value)

ruby - 当你重新定义一个方法时它应该什么时候起作用?

ruby-on-rails - 如何在 "day, month, year"时间表达式中使用 "1.VARIABLE.ago"这样的字符串变量?

ruby - (Ruby || Python) 窗口管理器

ruby - 如何在 Ruby 中刷新 Capybara URL