Arrays 索引lua中数组中的负数
问题:我有一个名为Arrays 索引lua中数组中的负数,arrays,lua,lua-table,Arrays,Lua,Lua Table,问题:我有一个名为X的数组X[1:20]。我首先初始化为0 我想在数组的每个元素上加1后传递一个数字。所以我读取数字并存储在局部变量z中。有时“数字”可以是正的,也可以是负的 但是,数组仅用于正值(即x[1…20]) 当“number”为负数时,lua给出错误消息“尝试对字段“?”执行算术运算”(一个nil值) 我该怎么办 local x= {} local number local z for i = 1, 20 do x [i] = 0; -- array initializ
X
的数组<代码>X[1:20]。我首先初始化为0
我想在数组的每个元素上加1后传递一个数字。所以我读取数字并存储在局部变量z
中。有时“数字”可以是正的,也可以是负的
但是,数组仅用于正值(即x[1…20])
当“number”为负数时,lua给出错误消息“尝试对字段“?”执行算术运算”(一个nil值)
我该怎么办
local x= {}
local number
local z
for i = 1, 20 do
x [i] = 0; -- array initialization
end
for y = 1, 5 do
z = number -- I am reading a "number" from hardware & it is a negative integer number
x[z] = x[z]+1 ;
end
这是因为您正在读取x[z],而不仅仅是分配它。 一个简单的修复方法是给它一个默认值。 例如:
这将使代码在默认情况下假定x[z]等于零。您不能在Lua中使用负数对表进行索引。您几乎没有机会:
MIN_VALUE = -20
z = number - MIN_VALUE
这种方法应该提供更好的性能,因为数组是直接寻址的初始化代码仅将数组X的正值设置为0。只需修改循环即可初始化Z的所有可能值
for i = -20, 20 do
x [i] = 0; -- array initialization
end
这假设Z的范围为-20到20
负索引值起作用,但在使用ipairs()函数时,有时会导致意外行为。ipairs()函数将仅从索引1开始迭代表的值,直到第一个未初始化(nil)项
给出了以下结果:
all values
-2 -2
-1 -1
0 0
1 1
2 2
positive integer values
1 1
2 2
您从未将“number”设置为任何值,因此它会给出错误
尝试对字段“?”执行算术运算(零值)
请注意“一个nil值”,因为这就是发生此错误的原因。所以下次将“number”设置为某个值,或添加“or”___“当您尝试执行诸如计算或设置变量之类的操作时。谢谢您。这很有效。然而,若我想实际使用负数并将其添加到数组中,那个么我有什么选择呢?根据您的回答,每次我得到负数时,它都会将0分配给x[z],我不希望这样,即使它使代码正常工作。你们认为若我想给数组赋负数,那个么我必须定义-20到20的数组,而不是1到20的数组吗?这取决于,默认情况下你们需要一个特定的值吗?我不知道你到底想要什么。“或0”仅表示默认值为0,末尾的+1将之前的值(如果不存在则为0)增加1。这将如同您已在ℝ (从-infinite到+infinite)并将每个值设置为0。
for i = -20, 20 do
x [i] = 0; -- array initialization
end
t = {}
for i = -2, 2 do t[i] = i end
print("all values")
for i = -2, 2 do
print(i, t[i])
end
print("positive integer values")
for k, v in ipairs(t) do
print(k, v)
end
all values
-2 -2
-1 -1
0 0
1 1
2 2
positive integer values
1 1
2 2