0Pricing
Lua Academy · レッスン

コンパレーターによる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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. コンパレーターによるtable.sort
  2. table.concatとtable.move
  3. ディープコピーとシャローコピー
  4. テーブルの変換:map、filter、reduce
← Lua Academyに戻る