如何按值对内部表进行排序?
How to sort inner tables by value?
因此,正如标题所说,我想在 Lua 中对 table 中的 table 进行排序。
下面是一个这样的嵌套示例 table。
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}, ...}
我想通过 return 前十名 tabl[*]['amount']
中的 table 列出它们各自的 tabl[*]['displayName']
* 作为 [=14= 的通配符] 通过 tabl[max.0]
完成的 table 应该类似于:
sorted = {1={displayName=Cobblestone, amount=190103}, 2={displayName=Dirt, amount=281}, ...}
我希望这对所有人都有意义。
Link 到完全嵌套 table:Full Piece
仅供参考:我无法控制 table 是如何 return 发送给我的;我从 this API.
中的函数 listItems()
得到了它们
首先,您的数组语法不正确。它应该更像:
local people = {
{Name="Alice",Score=10},
{Name="Bob",Score=3},
{Name="Charlie",Score=17}
}
其次,table.sort
函数应该可以完成这项工作。在我的特定示例中,它看起来 like this:
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
所以,我研究了一段时间,感谢社区的回答,我想出了这篇文章:
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: Cobblestone: 202924
2: Gunpowder: 1382
3: Flint: 1375
4: Oak Sapling: 1099
5: Arrow: 966
6: Bone Meal: 946
7: Sky Stone Dust: 808
8: Certus Quartz Dust: 726
9: Rotten Flesh: 627
10: Coal: 618
因此,正如标题所说,我想在 Lua 中对 table 中的 table 进行排序。 下面是一个这样的嵌套示例 table。
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}, ...}
我想通过 return 前十名 tabl[*]['amount']
中的 table 列出它们各自的 tabl[*]['displayName']
* 作为 [=14= 的通配符] 通过 tabl[max.0]
完成的 table 应该类似于:
sorted = {1={displayName=Cobblestone, amount=190103}, 2={displayName=Dirt, amount=281}, ...}
我希望这对所有人都有意义。
Link 到完全嵌套 table:Full Piece 仅供参考:我无法控制 table 是如何 return 发送给我的;我从 this API.
中的函数listItems()
得到了它们
首先,您的数组语法不正确。它应该更像:
local people = {
{Name="Alice",Score=10},
{Name="Bob",Score=3},
{Name="Charlie",Score=17}
}
其次,table.sort
函数应该可以完成这项工作。在我的特定示例中,它看起来 like this:
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
所以,我研究了一段时间,感谢社区的回答,我想出了这篇文章:
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: Cobblestone: 202924
2: Gunpowder: 1382
3: Flint: 1375
4: Oak Sapling: 1099
5: Arrow: 966
6: Bone Meal: 946
7: Sky Stone Dust: 808
8: Certus Quartz Dust: 726
9: Rotten Flesh: 627
10: Coal: 618