関数を使ったカスタムソート
CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 8/54。
table.sort()は数値や文字列の単純なリストにはとても便利ですが、実際のデータはもっと複雑なことがよくあります。プレイヤーの記録、在庫アイテム、ゲームのスコアなどのテーブルを扱う場合、各項目自体が複数のフィールドを持つテーブルになっていることがあります。
これらの複雑な構造を並べ替えるには、2つの要素をどのように比較するかをtable.sort()に正確に伝える必要があります。ここでカスタム比較関数が不可欠になります。比較関数は2つの要素を受け取り、並べ替え後の順序で1つ目が2つ目より前に来るべき場合にtrueを返します。
プレイヤーの記録をテーブルにした例を見てみましょう。
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)並べ替え後、プレイヤーテーブルはスコアの降順に並び、Bobが1番目(200)、Charlieが2番目(175)、Aliceが3番目(150)になります。比較関数は各プレイヤーテーブルのscoreフィールドにアクセスして、順序を決定します。
任意のフィールドで並べ替えることができます。名前をアルファベット順に、レベルを数値順に、あるいは複数の基準を組み合わせて並べ替えることもできます。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックと制御フローのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ