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

时间:2014-04-04 12:51:37

标签: sorting lua lua-table

我正在尝试使用其中一个名为Name的类对Lua中的对象表进行排序。

在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

正在使用这些名称,我想通过

对表格进行排序

2 个答案:

答案 0 :(得分:1)

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

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

同样在你的帖子中你有两个结束父母))肯定只是你帖子中的拼写错误,因为这将是在执行排序之前标记的语法错误。

答案 1 :(得分:-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已经排序了值