排序表与差距

时间:2015-02-27 10:44:37

标签: lua lua-table

我得到了一张表,这个表并不是要按照我需要在特定点排序的方式进行排序。 因此,我无法在创建时对表进行排序,但必须在需要时对其进行排序。

问题是,在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]时,它是可以的。基本上在这种情况下,我只使用索引来识别邻居,它们没有事先使用。

1 个答案:

答案 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