【28】いっしょにまなぼう!

Breakout #28 - Delete Objects - Pico-8 Hero PICO-8
Breakout #28 - Delete Objects - Pico-8 Hero

 TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。

前回はこちら

そして今回の動画はこちらです。

Breakout #28 – Delete Objects – Pico-8 Hero

【解説メモ】

カプセルのテーブル操作から、「なぜテーブル内容を降順で操作していくのか?」の検証です。

arr={"a", "b", "c", "d"}
for i=1,#arr do
  if arr[i]="c" then
    print("deleting")
    del(arr,"c")
  else
    print(arr[i])
  end
end

結果

a
b
deleting
nil

for 文で end までを昇順で4回繰り返します(テーブルの要素は4)。

添字( i )の内容を print 文で表示しますが、内容がc の場合は「deleting」と表示し、cをテーブルから削除します。

削除されて要素の数は3となりますが、繰り返しは4回ですので、最後の4回目は要素がない為、nil と表示されます(3番目が d になっている)。

実際には、要素がないものに対して操作しようとするとエラーになります。

それを回避するために、昇順ではなく降順で for 文を実行させます。

arr={"a", "b", "c", "d"}
for i=#arr,1,-1 do
  if arr[i]="c" then
    print("deleting")
    del(arr,"c")
  else
    print(arr[i])
  end
end

実行結果

d
deleting
b
a

4回実行され、nil の表示はありません。

降順で要素を操作すれば、テーブルからその要素を削除しても、その先の要素には影響がありません。

for 開始番号, 終了番号, 増加量 do と記述します。

実際のプログラム(ゲームなど)では、テーブルの要素を操作するには(条件で削除をする場合)、降順で処理すること。

コメント

タイトルとURLをコピーしました