使用 Lua 中的一个类对对象表进行排序

问题描述 投票:0回答:2

我正在尝试使用 Lua 中的一个名为

Name
的类对对象表进行排序。

在Python中你可以做这样的事情:

sorted_table = sorted(objects, key=lambda x: x.Name)

在 Lua 中执行此操作的优雅方式是什么?

到目前为止我已经尝试过:

sorted_table = table.sort(objects, function(a,b) return a.name < b.name end))

但它给了我这个错误:

[string "table.sort(objects, function(a,b) re..."]:1: attempt to compare two nil values

当我转储桌子时,它看起来像这样:

table: 000000000AF9BE40
    1 = Polygon (0x00000000194A5250) [App: 'Fusion' on 127.0.0.1, UUID: f60e6d62-b100-42f3-b5d4-5799ccf86136]
    2 = Polygon (0x000000001956EC60) [App: 'Fusion' on 127.0.0.1, UUID: f60e6d62-b100-42f3-b5d4-5799ccf86136]
    3 = Polygon (0x000000001956FAF0) [App: 'Fusion' on 127.0.0.1, UUID: f60e6d62-b100-42f3-b5d4-5799ccf86136]
    4 = Polygon (0x0000000019570980) [App: 'Fusion' on 127.0.0.1, UUID: f60e6d62-b100-42f3-b5d4-5799ccf86136]
    5 = Polygon (0x00000000194A43C0) [App: 'Fusion' on 127.0.0.1, UUID: f60e6d62-b100-42f3-b5d4-5799ccf86136]

举个例子,如果我打印以下内容:

print(object[1].Name)
print(object[2].Name)

我得到:

Name0001
Name0005

我想使用这些名称对我的表格进行排序

sorting lua lua-table
2个回答
1
投票

您使用了错误的字段名称:

table.sort(objects, function(a,b) return a.Name < b.Name end)

此外,在您的帖子中,您有两个关闭的父母

))
肯定只是您帖子中的拼写错误,因为在执行排序之前会标记语法错误。


-1
投票

先将表复制到新的变量表中,然后排序

参见此页面:http://lua-users.org/wiki/CopyTable

function shallowcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in pairs(orig) do
            copy[orig_key] = orig_value
        end
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end


a={
    {name="Name0001"},
    {name="Name0004"},
    {name="Name0003"}
}
b=shallowcopy(a)
table.sort(b,function(aa,bb) return aa.name < bb.name end) 

现在 b 已排序值

© www.soinside.com 2019 - 2024. All rights reserved.