Lua - 对可能具有 nil 值的表进行求和

我想在 Lua 中对表进行求和,但是如果我的表包含任何 nil 值,那么就会有问题。用户正在填写表格以提供我的表格值,因此他们可以让表格中的某个字段为空。

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

for key,value in pairs(contsum_data) do

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

  val = str_replace(chars, '', value)

  finalval = finalval + val
end

原文链接 https://stackoverflow.com/questions/70932691

点赞
stackoverflow用户2858170
stackoverflow用户2858170

你的请求有两个缺陷。

a) Lua表具有无限数量的nil值。

b) 添加0不会改变一个数字。

因此,你正在寻求如何对一个值进行无限次无操作的解决方案。

答案非常简单。你只需不做任何事情,让该值保持不变。将你拥有的值相加,并不考虑nil值即可。

2022-01-31 22:00:17
stackoverflow用户1514861
stackoverflow用户1514861

pairs 只会迭代非 nil 值。

考虑下面的代码:

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

在 for 循环中,甚至不会使用键 c。因此,这个循环只迭代 3 次。

如果将表定义为列表,也会是同样的情况,例如

data = {1, 2, nil, 4}

所以我认为您的问题不在于拥有 nil 值,可能出错的原因是输入值不是数字。我也不知道 str_replace 的实现是什么,所以问题可能出在那里。

2022-02-01 09:33:57
stackoverflow用户1847592
stackoverflow用户1847592

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

解释:

  1. val 是一个字符串,所以在应用算术运算之前必须将其转换为数字
  2. 如果 val 不是一个有效的字符串字面量(例如,它可能是一个空字符串),tonumber 返回 nil
  3. 为了将 nil 转换为零,使用了“短路 OR”运算符:x = x or 0
2022-02-01 17:44:13