Lua表格排序不起作用。

我有下面这个程序代码,试图对给定的列表进行排序。我尝试了各种选项,但仍然无法正常工作。

local List = {}
List[143] = "143"
List[145] = "145"
List[120] = "120"
List[178] = "178"
table.sort(List, compare)

比较函数被定义为:

function compare(a, b)
    if tonumber(a) < tonumber(b) then
        return true
    end
end

上述table.sort无法按任何顺序工作。我只想按递增数字顺序排序它。如果你有任何关于这个问题的想法,请帮我。提前感谢。

点赞
用户258523
用户258523

table.sort(以及其他 table.* 函数的大部分)仅定义在像数组一样的表上的操作中。这意味着键从 1..n 连续的整数表。您的表不符合这些标准。

2014-01-14 14:10:04
用户869951
用户869951

那个表的键不满足该函数的要求。根据Lua参考手册,键必须从1开始连续增加,排序表元素的给定顺序,从table[1]table[n]。试试下面的代码:

local List = {}
List[1] = "143"
List[2] = "145"
List[3] = "120"
List[4] = "178"
table.sort(List, compare)

甚至更好的方法是:

local List = {"143", "145", "120", "178"}
table.sort(List, compare)
2014-01-14 16:32:07
用户2226988
用户2226988

在表格中,键值对没有稳定的顺序。每次使用 pairsnext 函数遍历时,您可能会看到不同的键值对的序列。(假设这个顺序可能会因添加或删除表格而改变。)

除了设置或获取特定键值之外,其他表操作使用正整数键。 maxn 获得没有空值的最大键值 n。其他操作假定键是连续的。对于这样的表,正整数键可以考虑具有明确的范围并且是有序的,因此对它们排序是有意义的。

List 中的正整数键不是连续的。因此,sort 的行为并不有用(而且通常是不确定的)。

也许您想要像这样在所有正整数键上执行此操作:

local values = {}
-- extract values from positive integer keys
for key, value in pairs(List)
    if (type(key) = "number") and key > 0 then
        table.insert(values, value)
        List[key] = nil
    end
end
-- sort and restore them to the table
table.sort(values, function(a,b) return tonumber(a)<tonumber(b) end)
for key, value in values
    List[key] = value
end
2014-01-15 04:10:28