首页 > 代码库 > Lua table 顺序遍历

Lua table 顺序遍历

在Lua中, 如何遍历一个Table元素,主要有两种类型:

  • 1.pairs:下标从1开始,并且是连续的才可以使用
  • 2.ipairs:是无序的
    示例

    1. local t = {
    2. [10] = 1,
    3. [20] = 2,
    4. [30] = 3,
    5. [40] = 4,
    6. [50] = 5,
    7. [60] = 6
    8. }
    9. for k,v in pairs (t) do
    10. print("t1", k, v)
    11. end
    12. for k,v in ipairs (t) do
    13. print("t2", k, v)
    14. end

打印结果:

可以发现,使用ipairs的结果根本就没有打印出来,因为ipairs是从1开始打印的,
那像这种不是从1开始的, 又想要顺序打印要怎么做呢!
这时候需要借助另外一个表,原理类似于这样子

  1. local temp = {
  2. [1] = k1,
  3. [2] = k2,
  4. [3] = k3,
  5. [4] = k4,
  6. [5] = k5
  7. }

其中k1,k2...k5分别代表 t中的下标值(10,20,......60)
只要做到这个, 就可以用ipairs遍历temp,从而得到相对应的t了。

这里在《program in lua》中已经有现在代码可以使用了,

  1. function pairsByKeys(t)
  2. local a = {}
  3. for n in pairs(t) do a[#a + 1] = n end
  4. table.sort(a)
  5. local i = 0
  6. return function ()
  7. i = i + 1
  8. return a[i], t[a[i]]
  9. end
  10. end

改变以前的遍历代码为以下,其实就是pairs改为 pairsBykeys

  1. for k,v in pairs (t) do
  2. print("t1", k, v)
  3. end
  4. print("___________________")
  5. for k,v in Utils.pairsByKeys (t) do
  6. print("t2", k, v)
  7. end

打印如下,可以看到, 下面一排的打印结果已经是有序的了!



来自为知笔记(Wiz)


Lua table 顺序遍历