在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]