table.sort()
CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 7/54。
リスト形式のテーブルを扱う際、データを特定の順序で整理する必要がよくあります。Luaは、テーブルの要素をインプレース(元のテーブルを直接変更すること)で並べ替えるための table.sort() 関数を提供しています。これは、新しいテーブルを作成するのではなく、元のテーブルを修正することを意味します。
基本的な構文は明快です:
table.sort(myTable)デフォルトでは、table.sort() は数値を昇順に、文字列をアルファベット順に並べ替えます。以下はスコアのリストを使用した例です:
local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scores は {42, 55, 67, 85, 91} になります文字列の場合、ソートはアルファベット順に行われます:
local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- names は現在 {"Alice", "Bob", "Charlie"} ですデフォルトのソート順では不十分な場合があります。要素がどのように比較されるかを制御するために、第2引数としてカスタム比較関数を渡すことができます。この関数は2つの要素を受け取り、最初の要素が2番目の要素の前に来るべき場合に true を返します:
local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
return a > b -- 降順でソートします
end)
-- numbers は現在 {8, 5, 2, 1} ですtable.sort()関数は、1から始まる連続した整数のキーを持つリスト形式のテーブルでのみ動作します。これは、データを表示したり、特定の順序で処理したりする前に、データを整理するための強力なツールです。
チャレンジ
簡単scoresテーブルを受け取り、降順にソートされたスコアのフォーマット済み文字列を返す関数sortScoresDescendingを作成してください。
table.sort()をカスタム比較関数と共に使用してスコアを高い順に並べ替え、次にtable.concat()を使用してそれらをカンマで区切られた1つの文字列に結合します。
引数:
scores(table): 数値のスコアを含むリスト形式のテーブル
戻り値: 高い順にソートされ、カンマで区切られたスコアの文字列。形式: 95,87,76,54
チートシート
table.sort()関数は、テーブルの要素をその場で並べ替え、元のテーブルを直接変更します:
table.sort(myTable)デフォルトでは、数値は昇順に、文字列はアルファベット順にソートされます:
local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scoresは{42, 55, 67, 85, 91}になります
local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- namesは{"Alice", "Bob", "Charlie"}になります第2引数としてカスタム比較関数を指定することもできます。この関数は2つの要素を受け取り、最初の要素が2番目の要素の前に来るべき場合にtrueを返します:
local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
return a > b -- 降順でソート
end)
-- numbersは{8, 5, 2, 1}になりますtable.sort()は、1から始まる連続した整数キーを持つリスト形式のテーブルに対してのみ機能します。
自分で試してみよう
function sortScoresDescending(scores)
-- ここにコードを記述してください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。