0Pricing
Lua Academy · レッスン

ipairsで反復処理する

シーケンスを順番にループします。

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

ipairsを使う理由

インデックスを使ってシーケンスをたどることもできますが、ipairsを使うほうが簡潔で安全です。各インデックスと値を順番に受け取れます。

インデックス1から始まり、最初のnilで停止するため、隙間のないシーケンスに最適です。

local fruits = {"apple", "banana", "cherry"}
for i, v in ipairs(fruits) do
  print(i, v)
end

ループの形

基本形はfor index, value in ipairs(t) do ... endです。

各反復では、indexが1始まりの位置を表し、valueがその位置の要素を表します。手動でカウンターを用意する必要はありません。

local colors = {"red", "green", "blue"}
for i, c in ipairs(colors) do
  print("Color", i, "is", c)
end

インデックスを使わない

値だけが必要な場合は、慣例に従ってインデックスに_という名前を付け、使わないことを示します。

ループは変わらず、要素を1始まりの順番で処理します。

local nums = {10, 20, 30}
local total = 0
for _, n in ipairs(nums) do
  total = total + n
end
print("sum:", total)

1から始まり、穴で停止する

ipairsはインデックス1から始まり、次のインデックスがnilでない間、処理を続けます。

途中に穴があると、そこで停止します。そのため、ipairsは位置が欠けたtableではなく、きれいなシーケンスに使います。

local t = {"a", "b", nil, "d"}
for i, v in ipairs(t) do
  print(i, v)
end

値を合計する

リストを合計や最大値のような1つの数値にまとめる処理は、よく行う作業です。

ipairsを使うと、各値を順番に処理して蓄積できるため、コードを読みやすく書けます。

local prices = {3, 7, 2, 9}
local max = prices[1]
for _, p in ipairs(prices) do
  if p > max then max = p end
end
print("max:", max)

新しいリストを作成する

ipairsとtable.insertを組み合わせると、あるシーケンスを別のシーケンスに変換できます。

ここでは各数値を2倍にして新しいtableへ格納し、順序と1始まりのインデックスを維持しています。

local src = {1, 2, 3}
local doubled = {}
for _, n in ipairs(src) do
  table.insert(doubled, n * 2)
end
print(doubled[1], doubled[2], doubled[3])

ipairs と pairs の違い

pairs は文字列キーを含むすべてのキーを、順序を保証せずに処理します。ipairs は整数の並びである 1、2、3… だけを順番に処理します。

順序付けられた配列には、ipairs を使います。

local t = {"x", "y"}
t.name = "extra"
for i, v in ipairs(t) do
  print(i, v)
end

条件によるフィルタリング

ループ内で if を使うと、条件に一致する要素だけを残せます。

ここでは、3文字より長い単語を新しいシーケンスに集めます。

local words = {"hi", "hello", "yo", "howdy"}
local long = {}
for _, w in ipairs(words) do
  if #w > 3 then table.insert(long, w) end
end
print(long[1], long[2])

要素を検索する

検索するには、ipairs でループし、見つかった時点で停止します。インデックスから 1 始まりの位置がわかります。

目的の要素が現れたら、break を使って早期に戻ります。

local names = {"Ann", "Bob", "Cy"}
local found = 0
for i, n in ipairs(names) do
  if n == "Bob" then found = i break end
end
print("Bob at index", found)

反復処理中に数える

ループ内で変数を増やすと、一致した要素の数を数えられます。

これならインデックスを直接操作せずに、シーケンス全体を調べられます。

local marks = {5, 8, 3, 9, 6}
local passes = 0
for _, m in ipairs(marks) do
  if m >= 6 then passes = passes + 1 end
end
print("passing:", passes)

入れ子の ipairs

テーブルのテーブルを扱う場合は、ipairs のループを2つ入れ子にして、すべてのセルを処理します。

外側のループで行を、内側のループで列を走査します。どちらも 1 始まりです。

local grid = {{1, 2}, {3, 4}}
for _, row in ipairs(grid) do
  for _, cell in ipairs(row) do
    print(cell)
  end
end

理解度チェック

ipairs がどこから始まり、どこで終了するかを思い出しましょう。

まとめ

for i, v in ipairs(t) パターンを学びました。このパターンはシーケンスを 1 始まりの順序で処理し、最初の空きで停止します。

これを使って、リストの合計、フィルタリング、検索、変換を行えます。次は # で長さを測り、table.sort で要素を並べ替えます。

よくある質問

「ipairsで反復処理する」レッスンは無料ですか?

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

「ipairsで反復処理する」で何を学びますか?

シーケンスを順番にループします。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ipairsで反復処理する」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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