Lua 中的表值排序

我有一个表格,类似于这样:

tbl = {
    ['etc1'] = 1337,
    ['etc2'] = 14477,
    ['etc3'] = 1336,
    ['etc4'] = 1335
}

现在,我需要对这个表格进行排序,以便从高到低输出值:

tbl = {
    ['etc2'] = 14477,
    ['etc1'] = 1337,
    ['etc3'] = 1336,
    ['etc4'] = 1335
}

我已经尝试了很多函数,如table.sort等来自官方手册的其他函数,但都没有帮助。所以希望你们能帮帮我!

问候。

原文链接 https://stackoverflow.com/questions/6725707

点赞
stackoverflow用户4323
stackoverflow用户4323

Lua tables(表)没有除了键(key)以外的排序方式。你需要像下面这样更结构化数据:

tbl = {
    [1] = { ['etc2'] = 14477 },
    [2] = { ['etc1'] = 1337 },
    [3] = { ['etc3'] = 1336 },
    [4] = { ['etc4'] = 1335 }
}

或是像这样:

tbl = {
    [1] = { 'etc2', 14477 },
    [2] = { 'etc1', 1337 },
    [3] = { 'etc3', 1336 },
    [4] = { 'etc4', 1335 }
}

或是像这样,如果你想要和原来的表合并使用:

tbl_keys = {
    [1] = 'etc2',
    [2] = 'etc1',
    [3] = 'etc3',
    [4] = 'etc4'
}

要注意的是,我非常明确地写出了所有的数字索引。你当然可以省略它们,最后一个解决方案将是:

tbl_keys = {
    'etc2',
    'etc1',
    'etc3',
    'etc4'
}

也许这意味着你应该编写一个将原始数据转换为这种新形式的函数,或者在首次创建表之前就能完成它。

2011-07-17 18:15:54