Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中如何将数组中的每个数字乘以2_Ruby - Fatal编程技术网

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

在ruby中如何将数组中的每个数字乘以2,ruby,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 inpu

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

 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,然后可以压缩
值的结果:

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]
我不知道这样做的副作用,但看起来不错(当然,如果输出不仅仅是数字对象):

或者:

p ['a', 2, 2.5].grep(Numeric).map(&2.method(:*))
# [4, 5.0]
我必须将每个整数和浮点数乘以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}
数组语法不正确

这似乎不是一个数组,它应该类似于
a=['a',2,2.5]
。你期望的输出是什么?我想输出应该是
['a',4,5.0]
。但是,这种方法是如何在没有错误的情况下运行的呢?是否有
到\u Float
的方法?(与
to_f
)相反,如果您刚刚确定它是一个
整数
浮点
,那么为什么您需要调用
to_i
to_f
?您的问题在于map,数组中的每个项都将被测试,因此如果没有匹配测试,则假定字符将默认为零。因此,要么添加一个测试使字符保持不变,要么使用类似于每个字符的东西,然后返回新数组。你从哪里获得
到\u Float
?为什么在这里使用
self
?以及如何从无效结构中获取返回值。如果您想要输出
['a',4,5.0]
,该怎么办?i、 例如,在这种情况下保持字符串不变修改
if
语句
p['a',2,2.5].map{e|e.is_a?(数值)?e*2:e}
,如果您想保留它们,还可以删除
压缩文件。为什么e是a?(数字)
与第一个
相比,如果e是a?Numeric
?@dawg
是一个?
需要传递给它的类或模块。在三元组中,必须写入
e.is_a?(数值).
否则
e.is_a?数字的?e*2:e
,读作
e.is_a?(数字?e*2:e)
,括号中的位返回字符串或数字实例,而不是模块/类。
duplicate
在这里是一个糟糕的选择,
double
更合适。
> a = ["a", 2, 2.5]
> a.map{|e| e.is_a?(Numeric) ? e * 2 : e}
#=> ["a", 4, 5.0]