Menu
Coddy logo textTech

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から始まる連続した整数のキーを持つリスト形式のテーブルでのみ動作します。これは、データを表示したり、特定の順序で処理したりする前に、データを整理するための強力なツールです。

challenge icon

チャレンジ

簡単

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
quiz icon腕試し

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

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