テーブルの反復処理
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 17/73。
Lua のテーブルを何度も loop してきましたね。Luau ではまったく同じ loop を使い、さらに loop 変数に型を追加します。arrays の場合、ipairs は要素を #t まで、インデックス 1 から order に従ってたどり、両方の variables に型注釈を付けられます。
local temps: {number} = {18, 21, 19}
for day: number, temp: number in ipairs(temps) do
print(`Day {day}: {temp}`)
endipairs は最初に欠落しているインデックスで停止することを覚えておいてください。途中にある nil の穴によって、loop は早く終了します。きちんと管理された arrays ではめったに問題になりませんが、知っておく価値はあります。
maps には pairs を使います。これはすべてのキーと値のペアを訪問し、string キーも含まれます。{[string]: number} の map では、loop 変数は自然に string と number になります。
local ages: {[string]: number} = {Alice = 30, Bob = 25}
for name: string, age: number in pairs(ages) do
print(`{name} is {age}`)
end重要な注意点が 1 つあります。pairs はハッシュ部分のキーを保証された order なしで訪問します。実行するたびに異なる可能性があります。決定的な出力(ソートされたレポートやテスト)が必要な場合は、キーを array に集め、table.sort してから、ソート済みのキーを ipairs で loop し、map をインデックス指定します。
チャレンジ
簡単18、21、19、24 で初期化された型付き array temps: {number} を作成してください。
ipairs を使ってその array を loop し、両方の loop 変数(day: number, temp: number)に型注釈を付けてください。各要素について、次の内容を正確に出力します。
Day 1: 18(バッククォートを使った string 補間を使用)、そして各温度を累積する total に加算してください。
loop の後で、total を独立した行に出力してください。
自分で試してみよう
-- ここにコードを書く
-- 1) temps を宣言: {number} = {18, 21, 19, 24}
-- 2) for day: number, temp: number in ipairs(temps) do ... end
-- `Day {day}: {temp}` を出力し、total に合計する
-- 3) ループの後に total を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ