2016-04-02 37 views
1

所以,正如標題所說,我想在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[max.0]

tabl[1.0]通配符一個完成的表格應該是這個樣子:

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

我希望這對所有人都有意義。

鏈接到完整嵌套表:Full Piece 僅供參考:我不控制表返回給我;我從this API的函數listItems()中獲得了它們。

+0

您需要將[]中的數字設置爲正確的語法。 sorted = { [1] = {displayName = Cobblestone,amount = 190103}, [2] = {displayName = Dirt,amount = 281} } 即使自然數索引是默認值,但萬一您需要以不同的順序指定元素。 – tonypdmtr

回答

0

所以,我從事這工作了一段時間,感謝社區的答案我想出了這件作品:

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名的庫存s:

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 
3

首先,你陣列語法正確。它應該更像:

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 
+1

第3行中缺少逗號。還應確保N不超過#人。否則,你會得到一個錯誤的索引零值 – Piglet

+0

@Piglet固定逗號,N超過#人將是他的錯誤,我只是解釋如何做到這一點 – warspyking

+1

@warspyking但它可以這樣糾正:for i = 1,N <=#人和N或#人做 – tonypdmtr