我正在尝试使用 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
我想使用这些名称对我的表格进行排序
您使用了错误的字段名称:
table.sort(objects, function(a,b) return a.Name < b.Name end)
此外,在您的帖子中,您有两个关闭的父母
))
肯定只是您帖子中的拼写错误,因为在执行排序之前会标记语法错误。
先将表复制到新的变量表中,然后排序
参见此页面: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 已排序值