pairs() と ipairs() の比較
CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 3/54。
pairs() と ipairs() の両方を学んだので、それぞれをいつ使うべきかを理解することが重要です。どちらを選択するかは、テーブルの構造と、何を達成しようとしているかに完全に依存します。
1から始まる連続した整数キーを持つリスト形式のテーブルがある場合は、ipairs()を使用します。要素を順番に処理し、最初のnil値で停止するため、順序が重要な配列に最適です。
テーブルに文字列キーや混合されたキータイプがある場合、またはギャップ(隙間)に関係なくすべてのエントリにアクセスする必要がある場合は、pairs() を使用してください。これは、特定の順序に関係なく、テーブル内のすべてのキーと値のペアを反復処理します。
この混合テーブルを考えてみましょう:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}ipairs() を使用すると、3つのレベル文字列のみが表示されます。pairs() を使用すると、文字列キーを含む5つすべてのエントリが表示されます。
チャレンジ
簡単data テーブルを受け取り、連続した整数キーを持つ項目の数を返す関数 countSequentialItems を作成してください。
ipairs() を使用して、テーブルの連続した部分(インデックス 1 から最初の nil まで)にいくつ項目が存在するかをカウントしてください。これにより、混合テーブルを扱う際の ipairs() と pairs() の違いを理解するのに役立ちます。
引数:
data(テーブル): 連続した整数キーと文字列キーの両方を含む混合テーブル
戻り値: 連続した項目の数 (数値)
チートシート
1から始まる連続した整数キーを持つリスト形式のテーブルには、ipairs()を使用します。これは要素を順番に処理し、最初のnil値で停止します:
for i, value in ipairs(myList) do
-- 連続したアイテムのみを処理します
end文字列キー、混合キータイプ、またはギャップに関係なくすべてのエントリにアクセスする必要があるテーブルには、pairs()を使用します。これは特定の順序なしに、すべてのキーと値のペアを反復処理します:
for key, value in pairs(myTable) do
-- すべてのキーと値のペアを処理します
end混合テーブルの例:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() は "Level 1", "Level 2", "Level 3" のみを参照します
-- pairs() は5つのエントリすべてを参照します自分で試してみよう
function countSequentialItems(data)
-- ここにコードを書いてください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。