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