无法从ruby数组中删除NaN
我有一个值数组无法从ruby数组中删除NaN,ruby,Ruby,我有一个值数组 => [0.0, 4.76, 0.0, Infinity, NaN, 2.63, 0.74, 10.0, NaN, NaN, NaN, NaN, 0.0, NaN, NaN, NaN, NaN, NaN, Infinity, 5.26, NaN, 0.0, NaN, 3.45, 2.5, NaN, 10.0, 0.0, NaN, 2.94, NaN, NaN, 0.0, 2.04, 0.0, 11.11, NaN, NaN, 1.23, NaN, NaN, 11.11, N
=> [0.0, 4.76, 0.0, Infinity, NaN, 2.63, 0.74, 10.0, NaN, NaN, NaN, NaN, 0.0, NaN, NaN, NaN, NaN, NaN, Infinity, 5.26, NaN, 0.0, NaN, 3.45, 2.5, NaN, 10.0, 0.0, NaN, 2.94, NaN, NaN, 0.0, 2.04, 0.0, 11.11, NaN, NaN, 1.23, NaN, NaN, 11.11, NaN, NaN, NaN, 0.0, 9.68, NaN, NaN, 10.0, 5.0, 3.7, 10.0, Infinity, 0.0, 0.0, 1.41, NaN, 3.45, NaN]
当我运行此脚本删除NaN时,它会删除一些但不是所有NaN
def remove_from_array(numArray)
numArray.inject(0) do |i|
if numArray[i].nan?
numArray.delete_at(i)
end
i += 1
end
numArray
end
我遗漏了什么?如果删除一个项目并移动到下一个索引,则会向前移动两个项目,因为当前索引中的项目不再存在
幸运的是,有一种更好的方法,使用:
如果删除一个项目并移动到下一个索引,则向前移动两个项目,因为当前索引中的项目已不存在
幸运的是,有一种更好的方法,使用:
与其尝试删除它们,不如修改代码,这样就不会生成它们。使用
select
或reject
对导致NaN的值进行预测试。在if nummarray..
之前插入p“num_array={num_array}”
以查看发生了什么。你是说“NaN”
还是:NaN
?如前所述,Nan
是常量的值或该名称的方法返回的值。如果,正如我所怀疑的,Nan
是一个文本,请编辑。顺便说一句,在Ruby中,变量和方法(例如,num_array
)的名称通常使用“snake case”(所有小写字母和下划线)。与其尝试删除它们,不如修改代码,这样就不会生成它们。使用select
或reject
对导致NaN的值进行预测试。在if nummarray..
之前插入p“num_array={num_array}”
以查看发生了什么。你是说“NaN”
还是:NaN
?如前所述,Nan
是常量的值或该名称的方法返回的值。如果,正如我所怀疑的,Nan
是一个文本,请编辑。顺便说一句,在Ruby中,变量和方法的名称通常使用“snake case”(所有小写字母和下划线)(例如,num_array
)。
numArray.reject! &:nan?