我有一个包含字符,数字和浮点值的数组。
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
答案 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}
不是数组的正确语法。