1

ということで、タイトルの通りLuaでテーブルの並びをソートしたいと思います。そのようなネストされたテーブルの 1 つの例を以下に示します。

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[1.0]tabl[max.0]

完成したテーブルは次のようになります。

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

これがすべての人にとって理にかなっていることを願っています。

完全なネストされたテーブルへのリンク:フルピース 参考までに: テーブルがどのように返されるかを制御できません。このAPIの関数から取得しましたlistItems()

4

2 に答える 2

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
于 2016-04-02T04:02:52.517 に答える
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 個のインベントリが返されました。

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
于 2016-04-03T21:04:09.853 に答える