長さとソート
シーケンスを数えて並べ替えます。
「長さとソート」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
長さ演算子
# 演算子は、シーケンス内の要素数を返します。
3つの要素を持つ、隙間のない 1 始まりのテーブルでは、#t は 3 になります。最後の要素はインデックス #t にあります。
local list = {"a", "b", "c"}
print(#list)
print(list[#list])ループで長さを使う
数値 for ループの上限に #t を使うと、すべてのインデックスを処理できます。
シーケンスは 1 始まりなので、範囲は 1, #t になります。
local nums = {10, 20, 30, 40}
for i = 1, #nums do
print(i, nums[i])
end空のテーブル
空のシーケンスの長さは 0 です。
そのため、#t == 0 と書くと、リストに要素があるかどうかを簡単に確認できます。
local empty = {}
print(#empty)
if #empty == 0 then
print("list is empty")
end変更後の長さ
table の関数で要素を追加または削除すると、# もそれに応じて更新されます。
挿入すると数が増え、削除すると減ります。
local list = {"a", "b"}
table.insert(list, "c")
print(#list)
table.remove(list)
print(#list)隙間があると長さが壊れる
# が信頼できるのは、穴のないシーケンスだけです。隙間があると、結果が未定義になることがあります。
# の結果を信頼できる状態に保つため、table.insert と table.remove を使いましょう。
local good = {1, 2, 3}
print(#good)
table.insert(good, 4)
print(#good)その場でソートする
table.sort(t) はシーケンスをその場で並べ替えます。デフォルトでは小さい順になります。
新しいテーブルを返すのではなく、元のテーブルを変更します。
local nums = {3, 1, 2}
table.sort(nums)
print(nums[1], nums[2], nums[3])文字列のソート
文字列はデフォルトで、文字を1つずつ比較してアルファベット順に並べ替えられます。
ソート後は、インデックス 1 に順序上の最初の要素が入ります。
local names = {"Cy", "Ann", "Bob"}
table.sort(names)
print(names[1], names[2], names[3])降順
比較関数を渡すと、順序を制御できます。a > b を返すと、大きい要素から順に並べ替えられます。
この関数によって、a を b より前に置くかどうかが決まります。
local nums = {3, 1, 4, 2}
table.sort(nums, function(a, b)
return a > b
end)
print(nums[1], nums[2], nums[3], nums[4])カスタム比較
比較関数を使うと、アルファベット順ではなく文字列の長さで並べるなど、任意のルールでソートできます。
ここでは、短い単語が先に来るようにします。
local words = {"hello", "hi", "howdy"}
table.sort(words, function(a, b)
return #a < #b
end)
print(words[1], words[2], words[3])長さとソート
ツールを組み合わせて、リストをソートしてから位置で両端の要素を読み取ります。
昇順にソートすると、最小値はインデックス 1 に、最大値はインデックス #t にあります。
local data = {7, 2, 9, 4}
table.sort(data)
print("min:", data[1])
print("max:", data[#data])ソートしてから反復する
よくある処理の流れは、シーケンスをソートしてから ipairs で順番に処理し、出力することです。
ソートによって同じ 1 始まりのテーブルの順序が変わるため、反復処理は新しい順序に従います。
local scores = {50, 10, 30}
table.sort(scores)
for i, s in ipairs(scores) do
print(i, s)
end理解度チェック
長さ演算子が何を返すかを思い出しましょう。
まとめ
#t は隙間のないシーケンスの要素数を数え、最後の要素は t[#t] にあることを学びました。また、table.sort はその場で並べ替え、デフォルトでは昇順になり、カスタム比較関数も使えます。
insert、remove、ipairs と組み合わせることで、Lua のシーケンスを自信を持って扱えるようになります。
よくある質問
「長さとソート」レッスンは無料ですか?
はい。「長さとソート」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「長さとソート」で何を学びますか?
シーケンスを数えて並べ替えます。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「長さとソート」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。