2016-04-02 5 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}, ...} 
私が通過するとして記載されたトップ10 tabl[*]['amount']のテーブルを返したい

それぞれtabl[*]['displayName'] *完成テーブルのようなものになるはずですtabl[max.0]

tabl[1.0]のためのワイルドカードであること:

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

私はこれがすべてのところに意味があることを願っています。

完全なネストした表へのリンク:Full Piece FYI:テーブルが私に返される方法を制御できません。私はそれらをのthis APIに持っています。

+0

正しい構文を使用するには、数字を入力する必要があります。 ソート済み= { [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

まず第一に、あなたの配列文法的に正しいではありません。第二に、table.sort機能は、仕事をする必要があります

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

:それはより多くのようにする必要があります。私の特定の例では、のようにこのなります

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が#peopleを超えないようにする必要があります。 – Piglet

+0

@Pigletカンマが固定されています。N人が#人を超えてしまうのは間違いですが、私はそれをどうやって説明したのでしょうか? – warspyking

+1

@warspykingしかし、それは次のように修正することができます:for i = 1、N <=#人、Nまたは#人は何か – tonypdmtr

関連する問題