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