0Pricing
Lua Academy · レッスン

長さとソート

シーケンスを数えて並べ替えます。

「長さとソート」は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フィードバックを取得できます。ローカル設定は不要です。

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

  1. テーブルとしての配列
  2. 要素を追加・削除する
  3. ipairsで反復処理する
  4. 長さとソート
← Lua Academyに戻る