我需要一个功能
sort_on_values(t, ...)
其中...
是表t
应该排序的变量。
或sort_on_values(t, t_v)
其中t_v
是一个包含变量的表,表t
应该通过变量进行排序。
或类似的东西。
函数返回已排序的表或对现有表进行排序。
示例#1:
我有一张桌子
t = {{a=1,b=2,c=3},
{a=1,b=1,c=2},
{a=3,b=2,c=2}}
我这样做:
t = sort_on_values(t,a,b,c)
结果我得到了:
t == {{a=1,b=1,c=2},
{a=1,b=2,c=2},
{a=3,b=2,c=2}}
示例#2:
我这样做:
t = sort_on_values(t,b,a,c)
结果我得到了:
t == {{a=1,b=1,c=2},
{a=1,b=2,c=3},
{a=3,b=2,c=2}}
如果我有像
这样的表格,这也应该有效t = {{a=1,b=1,c=2,d=1},
{a=1,b=2,c=3,d=2},
{a=3,b=2,c=2,d=3}}
等等。
我该怎么做?
答案 0 :(得分:3)
vararg函数的变体
function sort_on_values(t,...)
local a = {...}
table.sort(t, function (u,v)
for i = 1, #a do
if u[a[i]] > v[a[i]] then return false end
if u[a[i]] < v[a[i]] then return true end
end
end)
end
答案 1 :(得分:1)
此任务的通用代码可能需要一些工作,但您可以从这开始:
t = {
{a=1,b=2,c=3},
{a=1,b=1,c=2},
{a=3,b=2,c=2},
}
function sort_on_values(t,a,b,c)
table.sort(t, function (u,v)
return
u[a]<v[a] or
(u[a]==v[a] and u[b]<v[b]) or
(u[a]==v[a] and u[b]==v[b] and u[c]<v[c])
end)
end
sort_on_values(t,"a","b","c")
for i=1,#t do
print(i,t[i].a,t[i].b,t[i].c)
end