Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问lua表中的值?_Lua_Lua Table - Fatal编程技术网

如何访问lua表中的值?

如何访问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[

我有下面的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[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()
。无论哪种方式,您都不需要循环从表中获取单个任意项。