对 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