我正在尝试使用其中一个名为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
正在使用这些名称,我想通过
对表格进行排序答案 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已经排序了值