Lua - 求和 table 可能有零值

Lua - Sum a table that may have nil values

我想对 lua 中的 table 求和,但如果我的 table 包含任何 nil 值,就会出现问题。用户正在填写表格以提供我的 table 值,以便他们可以将 table 中的字段留空。

如何处理 nil 值?求和时我希望 nil = 0。

for key,value in pairs(contsum_data) do

  chars ={',','%','$','₠','₡','₢','₣','₤','₥','₦','₧','₨','₩','₪','₫','€','₭','₮','₯','₱','₲','₳','₴','₵','₶','₷','₸','₹'}

  val = str_replace(chars, '', value)  
  
  finalval = finalval + val
end

您的请求有两个缺陷。

a) a Lua table 有无数个 nil 值

b) 加 0 不会改变数字。

因此,您正在寻求一种解决方案,即如何无限次不对某个值执行任何操作。

答案很简单。你什么都不做,保持值不变。添加您拥有的值并且不关心 nil 值。

pairs 仅迭代 non-nil 个值。

考虑这段代码:

data = {
    a = 1,
    b = 2,
    c = nil,
    d = 4
}
for key,value in pairs(data) do
    print(key, value)
end

在 for 循环中它甚至不会获取密钥 c。所以这个循环迭代了 3 次。

将 table 定义为列表时相同

data = {1 ,2 , nil, 4}

例如。

所以我认为您的问题不是零值。可能错误在于输入不是数字。我也不知道 str_replace 的实现是什么,所以问题可能出在

尝试finalval = finalval + (tonumber(val) or 0)

解释:

  1. val是一个字符串,所以你必须在应用算术之前将它转换为数字
  2. 如果 val 不是有效的字符串文字(例如,它可能是空字符串),tonumber returns nil
  3. 要将 nil 转换为零,使用“short-circuit OR”运算符:x = x or 0