pairsとipairsによるテーブルの反復処理
pairs()とipairs()を使ってテーブルを安全に走査します。
「pairsとipairsによるテーブルの反復処理」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
ipairs:順序付き配列反復
ipairs(t)は、インデックス1から始まる整数シーケンスを反復し、(index, value)の組を返します。最初のnilで停止します。順序が重要な配列風テーブルには、安全で予測しやすい選択肢です。
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs:すべてのキー
pairs(t)は、テーブル内のnilではないすべてのキーと値の組を、順序を定めずに反復します。内部ではnext()関数を使います。辞書や混在したテーブル、または型に関係なくすべてのキーを処理する必要がある場合は、pairsを使います。
local info = {name="Lua", version=5.4, embedded=true}
for k, v in pairs(info) do
print(k, v)
end
-- name Lua
-- version 5.4
-- embedded true (order may vary)pairsとipairsの使い分け
連続した配列にはipairsを使います(順序が保証され、nilで停止します)。辞書や混在したテーブル、またはすべてのキーが必要な場合はpairsを使います。配列にpairsを使うことはできますが、順序は保証されません。辞書にipairsを使うと、整数以外のキーが処理されません。
local mixed = {10, 20, label="hello", 30}
-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
io.write(v .. " ")
end
print() -- 10 20 30
-- pairs: sees everything
for k, v in pairs(mixed) do
print(k, v)
end要素数のカウント
シーケンスでは#tが要素数を返します。辞書では#tは信頼できないため、pairsで反復して手動で数えます。これは、混在したテーブルや文字列キーのテーブルを扱う際のバグを防ぐ重要な違いです。
local arr = {10, 20, 30}
print("#arr:", #arr) -- 3 (reliable)
local dict = {a=1, b=2, c=3}
print("#dict:", #dict) -- 0 (unreliable for dicts!)
local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count) -- 3反復中の値の変更
pairsで反復している間に、既存のキーの値を安全に更新できます。ただし、反復中にキーを追加または削除すると、動作は未定義です。変更内容を集めて、ループの後で適用してください。
local prices = {apple=1.0, banana=0.5, cherry=2.0}
-- Safe: update existing values
for k, v in pairs(prices) do
prices[k] = v * 1.1 -- 10% markup
end
for k, v in pairs(prices) do
print(k, string.format("%.2f", v))
endキーの収集
よくある操作として、決定的な出力を得るためにすべてのキーを集め、並べ替えた配列を作成します。pairsでキーを集めてから、table.sortで順序付けします。
local config = {host="localhost", port=8080, debug=true}
local keys = {}
for k in pairs(config) do
keys[#keys+1] = k
end
table.sort(keys)
for _, k in ipairs(keys) do
print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080ネストしたテーブルの反復
ネストしたテーブル(テーブルのテーブル)では、2つのループを組み合わせます。外側のループで最上位を反復し、内側のループで各ネストテーブルを反復します。任意の深さを扱うには、このパターンに再帰を組み合わせます。
local matrix = {
{1,2,3},
{4,5,6},
{7,8,9},
}
for i, row in ipairs(matrix) do
for j, val in ipairs(row) do
io.write(string.format("%3d", val))
end
print()
endipairsによるフィルタリング
ipairsで反復し、述語を満たす要素を追加することで、フィルタリングされたリストを作成します。結果は、一致した要素だけを含む新しい配列です。
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " ")) -- 2 4 6 8 10ipairsによるマッピング
すべての要素に変換を適用します。要素を反復し、変換後の値で新しい配列を作成します。これは、関数型言語におけるmap()に相当するLuaの処理です。
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do
result[i] = fn(v)
end
return result
end
local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " ")) -- 2 4 6 8 10
local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " ")) -- HELLO WORLDカスタムイテレーターでのpairs
関数からイテレーターと状態を返すことで、カスタムオブジェクトを反復可能にできます。このパターンは、pairsが内部で動作する方法に似ています。next, t, nilを返す仕組みです。イテレーターファクトリも同様に、関数とオプションの状態を返します。
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({"x","y","z"}) do
print(v)
end
-- x
-- y
-- zクイックチェック
pairs()とipairs()について正しい説明はどれですか?
復習:pairsとipairs
まとめ:
ipairs:順序付きで、1から始まる整数キーを処理し、nilで停止しますpairs:すべてのキーを任意の順序で処理し、途中で停止しません- 辞書には
pairsを、配列にはipairsを使います - pairsによる反復中はキーを追加・削除しないでください。既存の値の更新は安全です
- 決定的な出力が必要な場合は、キーを集めて並べ替えます
AI チューターと学ぶ Lua — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 40
- レッスン
- 159
よくある質問
「pairsとipairsによるテーブルの反復処理」レッスンは無料ですか?
はい。「pairsとipairsによるテーブルの反復処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「pairsとipairsによるテーブルの反復処理」で何を学びますか?
pairs()とipairs()を使ってテーブルを安全に走査します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「pairsとipairsによるテーブルの反復処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 配列としてのテーブル
- 辞書としてのテーブル
- pairsとipairsによるテーブルの反復処理
- ネストしたテーブルと構造化データ