我得到了一张表,这个表并不是要按照我需要在特定点排序的方式进行排序。 因此,我无法在创建时对表进行排序,但必须在需要时对其进行排序。
问题是,在indeces中有很多gabs,我想在这里排序的值是嵌套的。
简化型号:
table = {
[1] = { a = 1 , b = 31231, c = { c1 = "foo" , true } },
[8] = { a = 2 , b = 5231 , c = { c1 = "bar" , true } },
[92] = { a = 8 , b = 2 , c = { c1 ="asdgköbana" , false } },
}
现在我想按c [1]的长度对这个表进行排序。 我怎么能以最快的方式做到这一点?第一维中的表长度将保持在100个以下。
指标不需要保留。所以通过一个包含3个条目的表,当portage之后的最后一个索引为[3]时,它是可以的。基本上在这种情况下,我只使用索引来识别邻居,它们没有事先使用。
答案 0 :(得分:2)
使用table
作为变量会杀死table
库,您需要获取sort
函数。
尝试以下代码。请注意,它创建了一个新表来保存已排序的列表,但重用了内部表。
local t = {
[1] = { a = 1 , b = 31231, c = { c1 = "foo" , true } },
[8] = { a = 2 , b = 5231 , c = { c1 = "bar" , true } },
[92] = { a = 8 , b = 2 , c = { c1 ="asdgköbana" , false } },
}
local s = {}
for k,v in pairs(t) do
s[#s+1]=v
end
table.sort(s,function (a,b)
return #a.c.c1 < #b.c.c1
end)
for k,v in ipairs(s) do
print(k,v.a,v.c.c1)
end