对 table 进行排序
Sort table with gaps
我得到了一个 table,它不应该按照我需要在特定点进行排序的方式进行排序。
因此,我无法在创建时对 table 进行排序,但必须在需要时对其进行排序。
问题是,索引中有很多漏洞,我想在这里排序的值是嵌套的。
简化模型:
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] 的长度对 table 进行排序。
我怎样才能以最快的方式做到这一点? table 在第一个维度中的长度将保持在 100 个条目以下。
不需要保留索引。因此,通过具有 3 个条目的 table,当最后一个索引在 portage 之后是 [3] 时就可以了。基本上在这种情况下,我只使用索引来识别邻居,他们没有事先使用。
使用 table
作为变量会杀死 table
库,您需要它来获取 sort
函数。
试试下面的代码。请注意,它创建了一个新的 table 来保存排序列表,但重用了内部 tables.
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
我得到了一个 table,它不应该按照我需要在特定点进行排序的方式进行排序。 因此,我无法在创建时对 table 进行排序,但必须在需要时对其进行排序。
问题是,索引中有很多漏洞,我想在这里排序的值是嵌套的。
简化模型:
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] 的长度对 table 进行排序。 我怎样才能以最快的方式做到这一点? table 在第一个维度中的长度将保持在 100 个条目以下。
不需要保留索引。因此,通过具有 3 个条目的 table,当最后一个索引在 portage 之后是 [3] 时就可以了。基本上在这种情况下,我只使用索引来识别邻居,他们没有事先使用。
使用 table
作为变量会杀死 table
库,您需要它来获取 sort
函数。
试试下面的代码。请注意,它创建了一个新的 table 来保存排序列表,但重用了内部 tables.
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