Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在表格中循环并保持秩序?_Loops_Lua_Lua Table - Fatal编程技术网

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'},
    ...
}