问题描述
我有这段代码可以迭代Lua表“ childrenTable”以检索其值,但是我希望它们按“符号名称” 列进行排序,然后,按“名称”
列
local JSON = require 'dkjson'
local childrenTable = {}
childrenTable[1] = {symbolicname = "02 CONNECTOR",path = "system/core/b connector",name = "b connector"}
childrenTable[2] = {symbolicname = "02 CONNECTOR",path = "system/core/a connector",name = "a connector"}
childrenTable[3] = {symbolicname = "01 CORE",path = "/system/core/b",name = "b"}
childrenTable[4] = {symbolicname = "01 CORE",path = "/system/core/a",name = "a"}
for index,value in ipairs(childrenTable) do print(JSON.encode(value)) end
这将立即返回此结果:
{"name":"b connector","symbolicname":"02
CONNECTOR","path":"system/core/b connector"}
{"name":"a connector","path":"system/core/a connector"}
{"name":"b","symbolicname":"01 CORE","path":"/system/core/b"}
{"name":"a","path":"/system/core/a"}
但是我希望它按顺序返回列表:
{"name":"a","path":"/system/core/a"}
{"name":"b","path":"/system/core/b"}
{"name":"a connector","path":"system/core/a connector"}
{"name":"b connector","path":"system/core/b connector"}
预先感谢
罗杰
解决方法
使用table.sort
函数,它将遍历表并在当前索引的左,右翼向您传递一个项目。 (table.sort
基于快速排序算法)
这将为您服务:
local childrenTable = {}
childrenTable[1] = {symbolicname = "02 CONNECTOR",path = "system/core/b connector",name = "b connector"}
childrenTable[2] = {symbolicname = "02 CONNECTOR",path = "system/core/a connector",name = "a connector"}
childrenTable[3] = {symbolicname = "01 CORE",path = "/system/core/b",name = "b"}
childrenTable[4] = {symbolicname = "01 CORE",path = "/system/core/a",name = "a"}
table.sort(childrenTable,function(a,b)
if a.symbolicname < b.symbolicname then
return true
else
if a.name < b.name then
return true
else return false end
end
return false
end)
for k,v in pairs(childrenTable) do print(k,v.name,v.symbolicname) end
此外,对于大量数据,请考虑使用数据框。