Menu
Coddy logo textTech

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

CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 8/54。

table.sort() は数値や文字列の単純なリストには非常にうまく機能しますが、実際のデータはもっと複雑な場合が多いです。プレイヤーの記録、インベントリのアイテム、ゲームのスコアなどのテーブルがあり、各エントリ自体が複数のフィールドを持つテーブルである場合があります。

これらの複雑な構造をソートするには、2つのエントリをどのように比較するかをtable.sort()に正確に伝える必要があります。ここでカスタム比較関数が不可欠になります。比較関数は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)

ソート後、playersテーブルはスコアの降順に並べ替えられ、1位がBob(200)、2位がCharlie(175)、3位がAlice(150)となります。比較関数は、各プレイヤーテーブルのscoreフィールドにアクセスして、それらの順序を決定します。

名前をアルファベット順に、レベルを数値順に、あるいは複数の基準を組み合わせて、任意のフィールドでソートすることができます。

チートシート

複雑なデータ構造を持つテーブルをソートするには、table.sort() でカスタム比較関数を使用します。比較関数は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)

これにより、プレイヤーがスコアの降順でソートされます。テーブル構造内の任意のフィールドでソートすることができます。

自分で試してみよう

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

quiz icon腕試し

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

Logic & Flowのすべてのレッスン