Loops 如何在表格中循环并保持秩序?
我得到了以下表格集:Loops 如何在表格中循环并保持秩序?,loops,lua,lua-table,Loops,Lua,Lua Table,我得到了以下表格集: local a = { [12 * 30 * 24 * 60 * 60] = 'year', [30 * 24 * 60 * 60] = 'month', [24 * 60 * 60] = 'day', [60 * 60] = 'hour', [60] = 'minute', [1]
local a = {
[12 * 30 * 24 * 60 * 60] = 'year',
[30 * 24 * 60 * 60] = 'month',
[24 * 60 * 60] = 'day',
[60 * 60] = 'hour',
[60] = 'minute',
[1] = 'second'
}
然而,当我在它上面配对循环并打印密钥值时,我得到以下结果:
for seconds, str in pairs(a) do
print (seconds, str)
end
----------
31104000 year
60 minute
3600 hour
1 second
2592000 month
86400 day
正如你所看到的,秩序完全混乱了我如何才能在桌子上循环并保持秩序?您在错误的观念下工作:
Lua表显式地不保留输入元素的顺序,因此无法在事实发生后引用该顺序。
(在幕后,它们目前是数组和哈希映射的混合体) 您可能真正想要的(按照提供的示例)是迭代按键排序的元素。
这当然是可能的,但需要一个自定义迭代器 迭代器的工作方式:
因此,您的循环变成:
for seconds, str in sorted_iter(a) do
print (seconds, str)
end
你不能直接。您必须构建不同的表结构,最好从一开始就这样做:
local a = {
{ seconds = 12 * 30 * 24 * 60 * 60, name = 'year'},
...
}
然后,假设不添加或删除任何元素,表的数组部分将是一个序列。对于序列,可以使用#length运算符或ipairs
进行迭代
local a = {
{ seconds = 12 * 30 * 24 * 60 * 60, name = 'year'},
...
}