对于lua中table的排序,简单的table都会直接用到table.sort()
举个例子
local temp =
{
id,
name,
}
table.insert(temp, {id = 36, name = 2})
table.insert(temp, {id = 1, name = 2})
table.insert(temp, {id = 2, name = 2})
table.insert(temp, {id = 3, name = 2})
table.sort(temp,function(a,b) return (a.id < b.id) end)
for k,v in pairs(temp) do
print(k,v.id)
end
打印出来的结果为
1 1
2 2
3 3
4 36
但这样的排序仅限于数组类型的table,对table表为hash部分是不起作用的,会导致table并不会按照顺序排列
例如
local temp1 =
{
{"123123123"},
id = 1,
name = "huohuo",
test = "都选C"
}
table.sort(temp1, function(a,b) return tostring(a) > tostring(b)
end)
for k,v in pairs(temp1) do
print(k,v)
end
1 table: 0xecaae0
id 1
test 都选C
name huohuo
所以需要写一个
function SortByKeys (t, f)
local a = {}
for key,n in pairs(t) do table.insert(a, n) end
if #a > 1 then
table.sort(a, f)
end
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then
return nil
else
return i, a[i]
end
end
return iter
end
for name, line in SortByKeys(temp1 , sortFunc) do
print(name, line)
end
1 都选C
2 table: 0xecaae0
3 huohuo
4 1