排除空格的排序表格。

我有一个表格,它不是按照我需要的特定方式排序的。 因此,在创建表格时我无法对其进行排序,而只能在需要时进行排序。

问题是,索引中存在许多空隙,我想要排序的值是嵌套的。

简化模型:

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个条目的表格中,在传输后当最后一个索引为[3]时,这是可以的。基本上,在这种情况下,我只使用索引来标识相邻值,它们没有先前的用途。

点赞
用户107090
用户107090

使用 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
2015-02-27 11:41:33