Menu
Coddy logo textTech

関数を使ったカスタムソート

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 フィールドにアクセスして、順序を決定します。

任意のフィールドで並べ替えられます。名前をアルファベット順にしたり、レベルを数値順にしたり、複数の基準を組み合わせたりすることもできます。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックと制御フローのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ