处理 Lua 表时遇到了排序问题。

我有一个如下形式的Lua表:

tTest = {}

tTest.word1 = {
                IsOnline = true,
                UpdateTime = 2,
                Value = 150
              }
tTest.word2 = {
                IsOnline = true,
                UpdateTime = 1,
                Value = 25
              }
tTest.word3 = {
                IsOnline = true,
                UpdateTime = 1,
                Value = 1000
              }

我想按照最高的值从大到小迭代这个表。所以我尝试了这个方法:

for k,v in pairs(tTest, function(a,b) return a.Value > b.Value end) do
    print (v.Value)
end

但它没有显示排序后的值。

任何帮助都将不胜感激,谢谢。

点赞
用户1190388
用户1190388

如果您可以控制表结构,请设计一个表如下:

tTest = {
  {
    "word1",
    IsOnline = true,
    UpdateTime = 2,
    Value = 150
  },
  {
    "word2",
    IsOnline = true,
    UpdateTime = 1,
    Value = 25
  },
  {
    "word3",
    IsOnline = true,
    UpdateTime = 1,
    Value = 1000
  }
}

现在,您可以按以下方式对表进行排序:

table.sort( tTest, function(u,v) return u.Value > v.Value end )

如果您无法控制源表,请创建一个临时表:

local t = {}
for k, v in pairs(tTest) do
    t[ #t + 1 ] = v
    table.insert(t[#t], k)
end

然后以与上述情况相同的逻辑使用table.sort函数在这个本地表t上进行排序。

2014-07-27 01:37:47