Menu
Coddy logo textTech

テーブルの反復処理

CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 17/73。

Luaのテーブルのループ処理は何度も行ってきましたが、Luauでもまったく同じループ処理を維持したまま、ループ変数に型を追加できます。配列 (array) の場合、ipairs は要素をインデックス 1 から #t まで順番に反復処理 (walks) し、両方の変数に型注釈を付けることができます:

local temps: {number} = {18, 21, 19}
for day: number, temp: number in ipairs(temps) do
    print(`Day {day}: {temp}`)
end

ipairs は最初の欠損インデックスで停止することに注意してください。途中に nil の穴があるとループが途中で終了します。適切に管理された配列ではめったに問題になりませんが、覚えておく価値があります。

マップ の場合は pairs を使用します。これにより、文字列キーを含めてすべてのキー/値のペアが順番にアクセスされます。{[string]: number} マップでは、ループ変数は自然に stringnumber になります:

local ages: {[string]: number} = {Alice = 30, Bob = 25}
for name: string, age: number in pairs(ages) do
    print(`{name} is {age}`)
end

1つの重要な注意点:pairs がハッシュパートのキーを訪問する順序は保証されていません(実行ごとに異なる場合があります)。決定論的な出力(ソートされたレポートやテストなど)が必要な場合は、キーを配列に集め、table.sort でソートしてから、ソートされたキーを ipairs でループしてマップを参照してください。

challenge icon

チャレンジ

簡単

18211924 で初期化された型付き配列 temps: {number} を作成します。

ipairs を使ってループ処理を行い、両方のループ変数(day: number, temp: number)に型アノテーションを付けます。各要素に対して、正確に次のように出力します:

Day 1: 18

(バックティックスを使った文字列補間を使用)、そして各温度を累積合計に加算します。

ループの後、合計を単独の行に出力します。

自分で試してみよう

-- ここにコードを書いてください
-- 1) temps を宣言: {number} = {18, 21, 19, 24}
-- 2) for day: number, temp: number in ipairs(temps) do ... end
--    `Day {day}: {temp}` を出力し、total に合計する
-- 3) ループの後に total を出力する
quiz icon腕試し

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

Luau入門のすべてのレッスン