Pra*_*DTI 6 sorting lua key lua-table
我已经经历了很多问题和谷歌搜索结果,但找不到解决方案.
我正在尝试使用table.sortLua中的函数对表进行排序,但我无法弄清楚如何使用它.
我有一个表,其中键是随机数值.我想按升序排序.我也浏览过Lua wiki页面,但table.sort只能使用表值.
t = { [223]="asd", [23]="fgh", [543]="hjk", [7]="qwe" }
Run Code Online (Sandbox Code Playgroud)
我希望它像:
t = { [7]="qwe", [23]="fgh", [223]="asd", [543]="hjk" }
Run Code Online (Sandbox Code Playgroud)
您无法设置从哈希(这是您的表所使用的)中检索元素的顺序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
Run Code Online (Sandbox Code Playgroud)
这将打印
7 qwe
23 fgh
223 asd
543 hjk
Run Code Online (Sandbox Code Playgroud)
另一种选择是提供自己的迭代器,而不是pairs按照您需要的顺序迭代表,但是键的排序可能很简单,可以满足您的需求.
@lhf所说的是正确的,您的lua表以实现可行的顺序保存其内容。但是,如果要以排序的方式打印(或遍历),则可以(因此可以逐个比较它)。为此,您可以按照以下方式进行操作
for key, value in orderedPairs(mytable) do
print(string.format("%s:%s", key, value))
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,lua的一部分未提供orderedPairs,但是您可以从此处复制实现。
Lua 表中没有顺序的概念:它们只是键值对的集合。
下面的两个表具有完全相同的内容,因为它们包含完全相同的对:
t = { [223] = "asd" ,[23] = "fgh",[543]="hjk",[7]="qwe"}
t = {[7]="qwe",[23] = "fgh",[223] = "asd" ,[543]="hjk"}
Run Code Online (Sandbox Code Playgroud)