Lua中的高级表格排序。

我试图对一个高级表进行排序,但没有成功。

这是我的表结构:

{
    ["12345"] = {12345, "Something", {"Stuff"}},
    ["523544"] = {523544, "Something", {"Stuff"}},
    ["6744"] = {6744, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["724572"] = {724572, "Something", {"Stuff"}},
    ["54"] = {54, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["12345"] = {12345, "Something", {"Stuff"}},
    ["44"] = {44, "Something", {"Stuff"}},
}

我想要按从大到小的顺序排序:

{
    ["724572"] = {724572, "Something", {"Stuff"}},
    ["523544"] = {523544, "Something", {"Stuff"}},
    ["12345"] = {12345, "Something", {"Stuff"}},
    ["12345"] = {12345, "Something", {"Stuff"}},
    ["6744"] = {6744, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["54"] = {54, "Something", {"Stuff"}},
    ["44"] = {44, "Something", {"Stuff"}},
}

我遇到了一些问题:

  1. 它无法保存相等值的 2 个数。
  2. 我好像无法正确地按从大到小的顺序排序。

至于为什么索引是字符串,如果我执行 table[623258195] = "Example",表会创建 623258195 个索引,导致我的程序崩溃。

至于为什么值是表,它存储其他重要信息,第 2 和第 3 个值是表中的其他信息,第 1 个是索引的数字形式。

希望我表述清楚,如果这被认为是重复的问题,我很抱歉,我在搜索了一个小时后没有找到任何有帮助的答案。

点赞
用户2698261
用户2698261
  1. 您需要修改您的数据结构,以支持具有相同id/key的多个值:

    {
        [12345] = {
            {12345"foo", {"bar"}},--您可能需要以某种方式对这些进行排序。
            {12345"baz", {"qux"}}
        },
        [123] = {
            {123"foo", {"bar"}}
        }
    }
    
  2. 您可以使用table.sort(tbl,f),以及索引表:

    local unsorted = {}--在此表内部的格式为数据。
    local index = {}--将包含排序键的表(然后您将在此循环,获取未排序的[k])
    for k in pairs(unsorted)do
        index [#index + 1] = k--填充要排序的键。
    end
    table.sort(索引,functionabreturn b <a--对最高到最低进行排序,而不是最低-最高(默认值)
    end
    

这是完整的代码示例和结果。 http://ideone.com/thE1zP

2014-08-09 21:54:50
用户1442917
用户1442917

你不能“排序”哈希表中的键,因为它们没有像表中键的整数序列那样的“顺序”。

你可以改变数据结构将哈希表转换为表,但更简单的方法可能是拥有一个单独的表,其中只包含哈希键,并对它们的值进行排序;当你需要按特定顺序获取哈希表中的元素时,你只需要遍历该表中(排序后的)元素,然后从哈希表中检索元素。

在任何一种情况下,你都无法存储相同键的多个值,就像你试图做的那样:

{
...
    ["146"] = {146, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
    ["146"] = {146, "Something", {"Stuff"}},
...
}

你需要将它们存储在一个表中(并使用“146”键引用该表),或者重新考虑为什么需要使用相同键值的不同元素键。

2014-08-10 20:52:18