我已经解决了很多问题和谷歌搜索结果,但找不到解决方案。
我正在尝试使用Lua中的table.sort
函数对表进行排序,但我无法弄清楚如何使用它。
我有一个表,其中键是随机数值。我想按升序排序。我也浏览过Lua wiki页面,但table.sort
仅适用于表值。
t = { [223]="asd", [23]="fgh", [543]="hjk", [7]="qwe" }
我想要它:
t = { [7]="qwe", [23]="fgh", [223]="asd", [543]="hjk" }
答案 0 :(得分:8)
您无法使用pairs
设置从散列(您的表是什么)中检索元素的顺序。您需要从该表中获取密钥,将密钥排序为自己的表,然后使用这些排序的密钥从原始表中检索值:
local t = { [223]="asd", [23]="fgh", [543]="hjk", [7]="qwe" }
local tkeys = {}
-- populate the table that holds the keys
for k in pairs(t) do table.insert(tkeys, k) end
-- sort the keys
table.sort(tkeys)
-- use the keys to retrieve the values in the sorted order
for _, k in ipairs(tkeys) do print(k, t[k]) end
这将打印
7 qwe
23 fgh
223 asd
543 hjk
另一个选择是提供你自己的迭代器而不是pairs
来按你需要的顺序迭代表,但是键的排序可能很简单,可以满足你的需要。
答案 1 :(得分:4)
@lhf所说的是真的,你的lua表以实现可行的任何顺序保存其内容。但是,如果要以排序的方式打印(或迭代它),则可以(因此可以逐个元素地比较它)。为此,您可以通过以下方式完成此操作
for key, value in orderedPairs(mytable) do
print(string.format("%s:%s", key, value))
end
不幸的是,orderedPairs不是作为lua的一部分提供的,你可以从here复制实现。
答案 2 :(得分:2)
Lua表中没有顺序概念:它们只是一组键值对。
下面的两个表具有完全相同的内容,因为它们包含完全相同的对:
t = { [223] = "asd" ,[23] = "fgh",[543]="hjk",[7]="qwe"}
t = {[7]="qwe",[23] = "fgh",[223] = "asd" ,[543]="hjk"}