Menu
Coddy logo textTech

pairs() を使ったイテレーション

CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部 — レッスン 1/54。

Luaで辞書型のテーブルを扱う際、内部に格納されているすべてのキーと値のペアにアクセスする必要がよく生じます。pairs()関数を使用すると、キーの型に関わらず、テーブル内のすべてのエントリをループ処理して巡回することができます。for ループで pairs() を使用するための構文は次のようになります:
for key, value in pairs(myTable) do
    -- ここで key と value を使う
end
ループの各イテレーション中に、pairs() はキーとその対応する値の両方を提供します。これにより、両方の情報に同時にアクセスして操作することができます。プレイヤーの inventory を使った実践的な例です:
local inventory = {
    sword = 1,
    potion = 5,
    gold = 150
}

for item, quantity in pairs(inventory) do
    print(item .. ": " .. quantity)
end
このコードは各 `item` の名前とその `quantity` を表示します。 `pairs` 関数は、`strings` や数値、さらには他のテーブルを含む、あらゆる `key` の型で動作します。文字列の操作Luaでは、文字列連結演算子である2つのドット(..)を使用して文字列同士を結合できます。たとえば、"Hello" .. " " .. "World""Hello World" となります。複数行にわたってテキストを整形する必要がある場合は、改行エスケープ文字 "\n" を使用できます。Lua が文字列内で "\n" に遭遇すると、次の行へ移動する命令として扱います。例えば、print("Line 1\nLine 2") は以下のように出力します:
Line 1
Line 2
challenge icon

チャレンジ

簡単

inventory テーブルを受け取り、すべての item とその quantity をリストしたフォーマット済み文字列を返す printInventory function を作成してください。

pairs() を使用して inventory テーブルをループ処理し、各 line に item 名とその quantity を item: quantity の format で表示する文字列を作成します。各 item は別々の line にする必要があります。

各 item を固有の line に配置するには、各要素の間に newline 文字 "\n" を使用します。例えば、"apple: 5\nbanana: 3" は 2 つの別々の line として表示されます。最初の item の before に先頭の "\n" を追加しないように注意してください — items の間にのみ追加します。

引数:

  • inventory (table): key が item 名 (strings)、値が quantities (numbers) である辞書スタイルのテーブル

戻り値: "\n" で区切られた、各 item と quantity が別々の line にある文字列。{apple=5, banana=3} の output 例:
apple: 5
banana: 3

自分で試してみよう

function printInventory(inventory)
    -- 出力をフォーマットするには、'..' 演算子を使って文字列を連結できます。
    -- 新しい行を追加するには、特殊文字 '\n' を使用します。
    -- 最初のアイテムを追加しているのか、それ以降のアイテムを追加しているのかを追跡する方法が必要かもしれません
    -- アイテムの前に改行を追加するかどうかを決めるために。
    
    -- ここにコードを書いてください
end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックと制御フローのすべてのレッスン