Sorting 按Lua中的值对表进行关联排序
我有一个key=>value表,我想在Lua中进行排序。这些键都是整数,但不是连续的(并且有意义)。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",
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