Sorting 按Lua中的值对表进行关联排序

Sorting 按Lua中的值对表进行关联排序,sorting,lua,lua-table,asort,Sorting,Lua,Lua Table,Asort,我有一个key=>value表,我想在Lua中进行排序。这些键都是整数,但不是连续的(并且有意义)。Lua唯一的排序函数似乎是,它将表视为简单数组,丢弃原始键及其与特定项的关联。相反,我基本上希望能够使用函数 我所拥有的: items = { [1004] = "foo", [1234] = "bar", [3188] = "baz", [7007] = "quux", } 排序操作后我需要的内容: items = { [1234] = "bar",

我有一个key=>value表,我想在Lua中进行排序。这些键都是整数,但不是连续的(并且有意义)。Lua唯一的排序函数似乎是,它将表视为简单数组,丢弃原始键及其与特定项的关联。相反,我基本上希望能够使用函数

我所拥有的:

items = {
    [1004] = "foo",
    [1234] = "bar",
    [3188] = "baz",
    [7007] = "quux",
}
排序操作后我需要的内容:

items = {
    [1234] = "bar",
    [3188] = "baz",
    [1004] = "foo",
    [7007] = "quux",
}
有什么想法吗

编辑:根据答案,我假设这只是我正在使用的特定嵌入式Lua解释器的一个奇怪的怪癖,但在我的所有测试中,
pairs()
总是按照表项添加到表中的顺序返回表项。(即,上述两个声明的迭代方式不同)

不幸的是,因为这不是正常的行为,看起来我无法得到我需要的;Lua没有必要的内置工具(当然),而且嵌入式环境太有限,我无法解决它


不过,谢谢大家的帮助

你似乎误解了什么。你这里的是一本书。关联数组没有明确的顺序,例如,只有内部表示(通常已排序)对它们进行排序

简而言之,在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)
功能比较(a、b)
返回a[1]
你似乎误解了什么。你这里的是一本书。关联数组没有明确的顺序,例如,只有内部表示(通常已排序)对它们进行排序

简而言之,在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)
功能比较(a、b)
返回a[1]
几年前,我做了一小段Lua编码,但现在已经不太流利了

当遇到类似的问题时,我将数组复制到另一个数组中,并反转键和值,然后对新数组使用
sort


我不知道有没有可能使用Kornel Kisielewicz推荐的方法对数组进行排序。

几年前我做了一点Lua编码,但现在我已经不熟练了

当遇到类似的问题时,我将数组复制到另一个数组中,并反转键和值,然后对新数组使用
sort


我没有意识到使用Kornel Kisielewicz建议的方法对数组进行排序的可能性。

嗯,错过了无法控制迭代的部分。那里

但在卢阿,通常总有办法


这是一个开始。现在需要替换库使用的pairs()。这可能是一个简单的例子,如pairs=my_pairs。然后您可以使用上面链接中的解决方案,忽略了无法控制迭代的部分。那里

但在卢阿,通常总有办法


这是一个开始。现在需要替换库使用的pairs()。这可能是一个简单的例子,如pairs=my_pairs。然后可以使用上面链接中的解决方案,PHP数组不同于Lua表

  • PHP数组可能有一个有序的键值对列表

  • Lua表始终包含一组无序的键值对

当程序员选择使用整数1、2、3…时,Lua表充当数组。。。作为钥匙。语言语法和标准库函数,如
table.sort
为具有连续整数键的表提供了特殊支持

因此,如果您想要模拟PHP数组,您必须使用键值对列表来表示它,这实际上是一个表的列表,但是将其视为键值对列表更有帮助。将自定义的“小于”函数传递给
表。排序
即可完成所有设置


注意:Lua允许您将连续整数键与同一表中的任何其他类型的键混合使用,并且表示是有效的。我有时会使用此功能,通常是用一些元数据标记数组。

PHP数组不同于Lua表

  • PHP数组可能有一个有序的键值对列表

  • Lua表始终包含一组无序的键值对

当程序员选择使用整数1、2、3…时,Lua表充当数组。。。作为钥匙。语言语法和标准库函数,如
table.sort
为具有连续整数键的表提供了特殊支持

因此,如果您想要模拟PHP数组,您必须使用键值对列表来表示它,这实际上是一个表的列表,但是将其视为键值对列表更有帮助。将自定义的“小于”函数传递给
表。排序
即可完成所有设置


注意:Lua允许您将连续整数键与同一表中的任何其他类型的键混合使用,并且表示是有效的。我有时会使用此功能,通常是用几段元数据来标记数组。

几个月后,使用相同的查询来处理此问题。推荐的答案似乎指出了LUA中所需内容和外观之间的差距,但它并没有告诉我我到底想要什么:-这是一个按键排序的散列

但是,此页面上的前三个功能没有:即将进入此页面
1234     bar     
3188     baz     
1004     foo     
7007     quux