コンパレーターによるtable.sort
カスタム比較関数と安定ソート戦略でテーブルを並べ替えます。
「コンパレーターによるtable.sort」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
table.sortとは
table.sortは、比較関数を使ってテーブルをその場で並べ替えます。比較関数を指定しない場合は<演算子を使用します。
デフォルトの昇順ソート
数値または文字列のテーブルに対してtable.sort(t)を呼び出すと、昇順に並べ替えられます。
local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) endカスタム比較関数
2番目の引数としてfunction(a, b) return a < b endのような関数を渡します。
local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))降順ソート
比較を逆にして、降順に並べ替えます。
local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))フィールドによるテーブルのソート
レコードの配列を、特定のフィールドキーに基づいて並べ替えます。
local people = {
{name="Charlie", age=30},
{name="Alice", age=25},
{name="Bob", age=28}
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do print(p.name, p.age) end複数キーによるソート
主キーで並べ替え、同値の場合は副キーで並べ替えます。
table.sort(people, function(a, b)
if a.age ~= b.age then return a.age < b.age end
return a.name < b.name
end)安定性に関する注意
Luaのtable.sortは安定ソートを保証しません。同じ値の要素は任意の順序になる可能性があります。決定的な結果が必要な場合は、インデックスをタイブレーカーとして使用します。
大文字と小文字を区別しない文字列ソート
比較関数内でstring.lowerを使って正規化します。
table.sort(words, function(a, b)
return a:lower() < b:lower()
end)キー抽出関数を使ったソート
Schwartzian変換の手法を使い、抽出したキーをキャッシュして、ソート中の計算の繰り返しを避けます。
local function sortBy(t, keyFn)
local keyed = {}
for i, v in ipairs(t) do keyed[i] = {val=v, key=keyFn(v)} end
table.sort(keyed, function(a, b) return a.key < b.key end)
for i, item in ipairs(keyed) do t[i] = item.val end
end大規模なテーブルのソート
非常に大きなテーブルでは、Schwartzian変換を検討します。各要素とソートキーを組にして並べ替えた後、要素を取り出します。これにより、比較のたびにキーを再計算せずに済みます。
その場での変更とコピー
table.sortは元のテーブルを変更します。コピーをソートするには、まずtable.moveを使うか反復処理で複製してから、その複製をソートします。
比較関数に関する質問
数値を昇順に並べ替える比較関数はどれですか?
まとめ:table.sort
table.sortはその場でソートを行い、オプションの比較関数を受け取ります。安定ソートではなく、複雑な順序付けではフィールドベースや複数キーの方法と組み合わせて使用されます。
よくある質問
「コンパレーターによるtable.sort」レッスンは無料ですか?
はい。「コンパレーターによるtable.sort」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「コンパレーターによるtable.sort」で何を学びますか?
カスタム比較関数と安定ソート戦略でテーブルを並べ替えます。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「コンパレーターによるtable.sort」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンパレーターによるtable.sort
- table.concatとtable.move
- ディープコピーとシャローコピー
- テーブルの変換:map、filter、reduce