我正在尝试迭代包含数字和字符串的数组。现在我使用以下代码来完成此任务:
def mod_method(source_array, integer_increase)
source_array.map! do |x|
if x.is_a? Fixnum
x+=integer_increase
else
x
end
end
p source
end
因此,这将迭代所有整数并将第二个参数(整数)添加到所有值。我不明白的是,我是这样做的:
def mod_method(source_array, integer_increase)
source_array.map! do |x|
if x.is_a? Fixnum
x+=integer_increase
end
end
p source
end
它会将非整数的所有内容返回为NIL。我所做的就是摆脱其他的x'。它不会跳过不属于Fixnum类型的元素吗?为什么将这些值设置为零?我想如果我能弄清楚这一点,我将能够重构代码使其看起来更好。谢谢。
答案 0 :(得分:0)
因为当它不是数字时你返回nil。
你可以做的是在迭代后调用compact
方法,它将消除零值。
像这样:
def mod_method(source_array, integer_increase)
source_array.map! do |x|
if x.is_a? Fixnum
x+=integer_increase
end
end.compact!
p source
end
答案 1 :(得分:0)
以下是我的表现:
def mod_method(ary, offset)
ary.map{ |x|
(Fixnum === x) ? x += offset : x
}
end
mod_method([1, 'a'], 1) # => [2, "a"]
这不会修改传入的数组,它会返回一个新数组。如果你想破坏传入的数组,你已经知道使用map!
。
Fixnum === x
是一种简单的方式来询问Fixnum,如果x是它的类型:
Fixnum === 1 # => true
Fixnum === 'a' # => false
其余部分是三元语句,是if
/ then
/ else
的单行版本。