Lua Academy · レッスン

要素を追加・削除する

table.insertとremoveを使います。

レッスン 2/413 ステップ

「要素を追加・削除する」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

シーケンスを拡張する

実際のリストは、プログラムの実行中にサイズが変化します。Luaには、末尾に要素を追加するtable.insertが用意されています。

シーケンスは1始まりなので、2つの要素の後に追加するとインデックス3に入ります。

local list = {"a", "b"}
table.insert(list, "c")
print(list[1], list[2], list[3])

table.insertで末尾に追加する

引数を2つ指定したtable.insert(t, value)は、現在の最後のインデックスの直後にvalueを配置します。

呼び出すたびにシーケンスが1つずつ大きくなり、インデックスの連続性も保たれます。

local q = {}
table.insert(q, "first")
table.insert(q, "second")
print(q[1], q[2])

指定した位置に挿入する

引数を3つ指定したtable.insert(t, pos, value)は、インデックスposに挿入し、それ以降の要素を後ろへ移動します。

ここでは位置2に"X"を入れるため、元の2番目の要素は位置3に移動します。

local list = {"a", "b", "c"}
table.insert(list, 2, "X")
print(list[1], list[2], list[3], list[4])

先頭に挿入する

先頭に追加するには、位置1に挿入します。既存の要素はすべて、インデックスが1つずつ後ろにずれます。

便利な方法ですが、Luaがすべての要素を移動する必要があるため、大きなリストでは遅くなります。

local list = {"b", "c"}
table.insert(list, 1, "a")
print(list[1], list[2], list[3])

最後の要素を削除する

引数を1つ指定したtable.remove(t)は、最後の要素を削除して返します。

シーケンスは1つ小さくなり、隙間のない状態が保たれます。

local list = {"a", "b", "c"}
local gone = table.remove(list)
print("removed:", gone)
print(list[1], list[2], list[3])

指定した位置から削除する

table.remove(t, pos)は、posの要素を削除し、それ以降の要素を前へ移動して隙間を埋めます。

位置は1始まりなので、pos = 1を指定すると最初の要素が削除されます。

local list = {"a", "b", "c"}
local gone = table.remove(list, 1)
print("removed:", gone)
print(list[1], list[2])

removeは値を返す

table.removeはどちらの形式でも、取り出した値を返します。そのため、返された値をすぐに利用できます。

これにより、tableをスタックのように扱えます。insertでプッシュし、removeでポップします。

local stack = {}
table.insert(stack, 10)
table.insert(stack, 20)
local top = table.remove(stack)
print("popped:", top)

シンプルなキュー

末尾に挿入し、先頭(pos = 1)から削除すると、先入れ先出しのキューを表現できます。

削除するたびに残りの要素が前へ移動するため、次の要素はインデックス1で待機します。

local queue = {}
table.insert(queue, "Ann")
table.insert(queue, "Bob")
print("serving:", table.remove(queue, 1))
print("next:", queue[1])

手動で穴を作らない

list[2] = nilのように要素へnilを設定すると、途中に穴ができてシーケンスが壊れることがあります。

要素を移動してインデックスの連続性を保つtable.removeを使うようにしましょう。

local list = {"a", "b", "c"}
table.remove(list, 2)
print(list[1], list[2])

入力から構築する

よく使うパターンは、空のtableから始め、データが届くたびに末尾へ追加する方法です。

ここでは、insertを使って偶数を新しいシーケンスに集めています。

local evens = {}
for n = 1, 6 do
  if n % 2 == 0 then
    table.insert(evens, n)
  end
end
print(evens[1], evens[2], evens[3])

挿入と削除を組み合わせる

操作は自由に組み合わせられます。以下では、3つの名前を末尾に追加してから、中央の要素を削除します。

削除後、リストには連続した2つの要素が残ります。

local names = {}
table.insert(names, "Al")
table.insert(names, "Bea")
table.insert(names, "Cy")
table.remove(names, 2)
print(names[1], names[2])

理解度チェック

削除によってシーケンスがどのように移動するか考えてみましょう。

まとめ

table.insertでリストを拡張する方法(末尾への追加、または1始まりの位置への挿入)と、table.removeでリストを縮小する方法を学びました。table.removeは削除した値を返し、隙間を埋めます。

手動でnilの穴を作るのは避けましょう。次は、ipairsを使ってきれいに反復処理する方法を学びます。

無料で開始

AI チューターと学ぶ Lua — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
40
レッスン
159

よくある質問

「要素を追加・削除する」レッスンは無料ですか?

はい。「要素を追加・削除する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「要素を追加・削除する」で何を学びますか?

table.insertとremoveを使います。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「要素を追加・削除する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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