要素を追加・削除する
table.insertとremoveを使います。
「要素を追加・削除する」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- テーブルとしての配列
- 要素を追加・削除する
- ipairsで反復処理する
- 長さとソート