微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lua:在两个特定列上迭代表带有字母数字值

如何解决Lua:在两个特定列上迭代表带有字母数字值

我有这段代码可以迭代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

此外,对于大量数据,请考虑使用数据框。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。