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)
解释:
val
是一个字符串,所以你必须在应用算术之前将它转换为数字
- 如果
val
不是有效的字符串文字(例如,它可能是空字符串),tonumber
returns nil
- 要将
nil
转换为零,使用“short-circuit OR”运算符:x = x or 0
我想对 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)
解释:
val
是一个字符串,所以你必须在应用算术之前将它转换为数字- 如果
val
不是有效的字符串文字(例如,它可能是空字符串),tonumber
returnsnil
- 要将
nil
转换为零,使用“short-circuit OR”运算符:x = x or 0