如何访问lua表中的值?
我有下面的lua代码,可以打印出设备的Mac地址如何访问lua表中的值?,lua,lua-table,Lua,Lua Table,我有下面的lua代码,可以打印出设备的Mac地址 local sc = Command.Scan.create() local devices = sc:scan() local topicMac local list = {} for _,device in pairs(devices) do print(device:getMACAddress()) list[device] = device:getMACAddress() end topicMac = list[
local sc = Command.Scan.create()
local devices = sc:scan()
local topicMac
local list = {}
for _,device in pairs(devices) do
print(device:getMACAddress())
list[device] = device:getMACAddress()
end
topicMac = list[0]
print(topicMac)
由于有几个地址,它们列在一个表中,我只想将第一个地址保存到局部变量“topicMac”中。我尝试通过在数组中添加第一个索引(0或1)来达到第一个值
为什么要将
nil
作为返回?可以将next
关键字用作变量函数,从表中检索第一个索引和值
local index, value = next(tab) -- returns the first index and value of a table
因此,在你的情况下:
local _, topicMac = next(list)
“第一”和“第二”取决于我们有什么钥匙。要检查它,只需使用print():
对于k,d成对(设备)do
打印(k,'=',d:getMACAddress())
结束
如果键是数字,您可以决定哪个是“第一”。如果键是字符串,则仍然可以使用算法确定表中的第一项:
local\u first=“某些\u默认\u键”
对于k,d成对(设备)do
如果k
如果键是对象或函数,则无法直接比较它们。因此,您只需选择任何第一项:
对于d,成对(设备)do
topicMac=d:getMACAddress()
打破
结束
打印(topicMac)
同时使用0或1,在控制台上的结果为“nil”。如果要访问本地上下文之外的变量,不要将其声明为local
。即使不在本地声明,返回值也为“nil”。您是否仍然需要整个列表
,或者是否可以丢弃除第一项之外的所有内容?如果您不需要完整的列表
,@Senor的答案是正确的。这里有很多信息缺失:设备看起来像什么?你的“第一个”MAC地址是什么,或者你只是想要列表中的任何MAC地址?如果你只想要第一个地址,为什么你需要一个列表呢?它实际上给出了表的第二个值……对吗?让它返回第二个值似乎很随意。如果您打算丢弃表的其余部分,您可以使用一个小技巧,即在第一次迭代后使用break终止循环。@WhatIsProtocoll:Lua表是无序的。它们实际上没有第一个或第二个值。@只有当键不是顺序键时,才有路德,否则您可以使用ipairs
以顺序方式循环。我猜devices
表将有编号的键,因此如果您想获得第一个键,请尝试使用ipairs
和我上面提到的方法。如果devices
是一个数组,它们可以执行local-topicMac=devices[1]:getMACAddress()
。无论哪种方式,您都不需要循环从表中获取单个任意项。