温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Associatively sorting a table by value in Lua

其他 - 在Lua中按值对表进行关联排序

发布于 2020-03-29 22:04:34

我有一个键=>值表,我想在Lua中排序。键都是整数,但不是连续的(有含义)。Lua唯一的排序功能似乎是table.sort,它将表视为简单数组,丢弃原始键及其与特定项目的关联。相反,我实际上希望能够使用PHP的asort()功能。

是)我有的:

items = {
    [1004] = "foo",
    [1234] = "bar",
    [3188] = "baz",
    [7007] = "quux",
}

排序操作后我想要什么:

items = {
    [1234] = "bar",
    [3188] = "baz",
    [1004] = "foo",
    [7007] = "quux",
}

有任何想法吗?

编辑:基于答案,我将假定这只是我正在使用的特定嵌入式Lua解释器的一个奇怪现象,但是在我的所有测试中,pairs()始终以添加表项的顺序返回表项桌子。(即上述两个声明将以不同的方式进行迭代)。

不幸的是,由于这不是正常行为,因此我无法获得所需的东西。Lua没有内置必要的工具(当然),并且嵌入式环境太有限,我无法解决。

尽管如此,还是谢谢您的帮助!

查看更多

提问者
Ben Blank
被浏览
30
941 2016-06-28 09:50

您似乎误会了一些东西。您在这里拥有的是一个关联数组关联数组没有明确的顺序,例如,只有内部表示形式(通常是排序的)才能对它们进行排序。

简而言之-在Lua中,您发布的两个数组都是相同的

相反,您想要的是这样的表示形式:

items = {
    {1004, "foo"},
    {1234, "bar"},
    {3188, "baz"},
    {7007, "quux"},
}

虽然您现在无法按索引获取它们(它们分别被索引为1、2、3、4,但是您可以创建另一个索引数组),但是您可以使用对其进行排序table.sort

排序功能将是:

function compare(a,b)
  return a[1] < b[1]
end

table.sort(items, compare)

发布
问题

分享
好友

手机
浏览

扫码手机浏览