如何按值对表进行排序,然后按顺序打印索引

时间:2018-07-11 02:58:55

标签: lua lua-table

我想使用以下格式创建表t

t[uniqueID] = order

uniqueID将是唯一的,但order每次都可以相同或不同。

然后我想按升序对表格进行排序,以便可以相应地打印uniqueID

我的代码:

t = {}

function compare(a, b)
    return a[2] < b[2]
end

function printid()
    for k, v in pairs(t) do
        print(k)
    end
end

function main()
    t[5] = 47
    t[6] = 45
    t[7] = 49
    table.sort(t, compare)
    printid()
end

我得到的结果:

5
6
7

我期望的结果:

6
5
7

如何获得想要的结果?

2 个答案:

答案 0 :(得分:4)

来自“在Lua中编程”一节19.3 “Sort”

  

一个常见的错误是试图对表的索引进行排序。在一个表中,索引形成一个集合,并且没有任何顺序。

这意味着您必须将表<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <header> <div class='wrapper'> <img class='header-logo' src="assets/images/logo.jpg" alt="a logo"> <a class='btn btn-origin' href="#">Get in touch</a> <div class='menu-icon'> <div class='hamburger'></div> </div> <div class='menu-content'> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> <li><a href="#">Location</a></li> </ul> </div> </div> </header>对放入另一个具有连续索引的表t中。然后可以根据您定义的谓词对该表进行排序。此外,在迭代连续索引的表时必须使用sorted,因为在ipairs中未指定顺序。

pairs

Live on Wandbox

答案 1 :(得分:2)

pairs doesn't iterate in any particular order(无论是否排序)。

table.sort仅适用于 lists –使用键[1][2][3],...,{{ 1}}。


您想要按顺序排列的ID列表。这意味着

  1. 列出ID列表
  2. 通过它们的关联值对其进行排序

在代码中,

[#list]