pairs() を使ったイテレーション
CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 1/54。
Luaで辞書型のテーブルを扱うときは、内部に格納されているすべてのキーと値のペアにアクセスする必要があることがよくあります。ループの各反復で、このコードは各 item の名前とその quantity を出力します。
pairs() functionを使うと、キーの型に関係なく、テーブル内のすべてのエントリをループ処理できます。The syntax for using pairs() in a for loop looks like this:for key, value in pairs(myTable) do
-- ここで key と value を使う
endpairs() は key とそれに対応する値の両方を提供します。つまり、両方の情報に同時にアクセスして操作できます。プレイヤーのinventoryを使った実践的な例を見てみましょう:local inventory = {
sword = 1,
potion = 5,
gold = 150
}
for item, quantity in pairs(inventory) do
print(item .. ": " .. quantity)
endpairs() 関数は、strings、数値、さらには他のテーブルを含む、あらゆる key の型で機能します。文字列の操作Luaでは、連結演算子を使って文字列を結合できます。これは2つのドット(..)です。たとえば、"Hello" .. " " .. "World" は "Hello World" になります。複数の行にわたってテキストをフォーマットする必要がある場合は、改行エスケープ文字 "\n" を使用できます。Lua が文字列内の "\n" に遭遇すると、それを次の行へ移動する命令として扱います。たとえば、print("Line 1\nLine 2") は次のように output します。Line 1
Line 2チャレンジ
簡単printInventoryという関数を作成してください。この関数はinventoryテーブルを受け取り、すべてのitemとそのquantityを一覧にした整形済み文字列を返します。
pairs()を使用してinventoryテーブルを反復処理し、各行にitem名とそれに続くquantityをitem: quantityの形式で示す文字列を作成してください。各itemは別々の行に配置します。
各itemをそれぞれ別の行に配置するには、エントリ間に改行文字"\n"を使用します。たとえば、"apple: 5\nbanana: 3"は2つの別々の行として表示されます。最初のitemの前に先頭の"\n"を追加しないように注意してください。追加するのはitem間だけです。
パラメーター:
inventory(table): キーがitem名(strings)で、値がquantity(numbers)である辞書形式のテーブル
戻り値: 各itemとquantityが別々の行に配置され、"\n"で区切られた文字列。{apple=5, banana=3}に対する出力例:apple: 5banana: 3
自分で試してみよう
function printInventory(inventory)
-- 出力をフォーマットするには、'..' 演算子を使って文字列を連結できます。
-- 新しい行を追加するには、特殊文字 '\n' を使用します。
-- 最初のアイテムを追加しているのか、それ以降のアイテムを追加しているのかを追跡する方法が必要かもしれません
-- アイテムの前に改行を追加するかどうかを決めるため。
-- ここにコードを書いてください
endこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックと制御フローのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ