如何按值排序内部表格?

所以,正如标题所说,我想在Lua中对表格进行排序。 以下是一个嵌套表格的示例。

tabl = {2.0={amount=281.0, meta=0.0, displayName=Dirt, name=minecraft:dirt}, 3.0={amount=190103.0, meta=0.0, displayName=Cobblestone, name=minecraft:cobblestone}, ...}

我想遍历并返回排名前十的tabl [*] ['amount']的表格,以及它们各自的tabl [*] ['displayName'] \ *表示tabl [1.0]tabl [max.0]的通配符

完成的表格应该如下所示:

sorted = {1={displayName=Cobblestone, amount=190103}, 2={displayName=Dirt, amount=281}, ...}

我希望这对所有人都有意义。

完整嵌套表的链接:Full Piece FYI:我无法控制返回给我的表格的方式; 我从这个 API中得到的。

点赞
用户3979429
用户3979429

首先,你的 arrays **不是 语法正确的**。应该更像下面这样:

local people = {
    {Name="Alice",Score=10},
    {Name="Bob",Score=3},
    {Name="Charlie",Score=17}
}

其次,table.sort 函数应该能够完成任务。在我的特定示例中,它看起来应该是这样的:

table.sort(people, function(a,b) return a.Score > b.Score end)

最后,要获取前 N 个,只需进行 _迭代_:

for i = 1,N do
    print(people[i].Name, people[i].Score)
end
2016-04-02 04:02:52
用户4350585
用户4350585

所以,我花了一些时间来研究,并且得益于社区的答案,我得到了以下代码:

bridge = peripheral.wrap("left")
items = bridge.listItems()

sorted = {}

for i, last in next, items do
  sorted[i] = {}
  sorted[i]["displayName"] = items[i]["displayName"]
  sorted[i]["amount"] = items[i]["amount"]
end

table.sort(sorted, function(a,b) return a.amount > b.amount end)

for i = 1, 10 do
  print(i .. ": " .. sorted[i].displayName .. ": " .. sorted[i].amount)
end

它返回了前10个库存:

1: 圆石:202924
2: 火药:1382
3: 燧石:1375
4: 橡树树苗:1099
5: 箭:966
6: 骨粉:946
7: 天石尘:808
8: 证明矿水晶尘:726
9: 腐肉:627
10: 煤:618
2016-04-03 21:04:09