Menu
CoddyTech

テーブルの反復処理

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

Luaのテーブルを何度もループ処理してきましたね。Luauでもループはまったく同じで、ループ変数に型を追加できます。配列では、ipairsが要素を順番にたどり、インデックス1から#tまで処理します。両方の変数に型注釈を付けられます。

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}型のマップでは、ループ変数は自然に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がハッシュ部分のキーをたどる順序は保証されませんtable.sortで並べ替えてから、ipairsで並べ替え済みのキーをループ処理し、マップの値を参照します。

challenge icon

チャレンジ

簡単

1週間の気温とその合計を出力します。

  1. local temps: {number} = {12, 15, 11, 14}とlocal total = 0を宣言します。
  2. for day: number, temp: number in ipairs(temps) doでループし、`Day {day}: {temp}`を出力して、tempをtotalに加えます。
  3. ループの後に、totalを出力します。

「Run Code」を押すと、出力にはDay 1: 12からDay 4: 14までが表示され、その後に52が表示されます。

自分で試してみよう

-- 1) temps: {number} と total = 0 を宣言する
-- 2) 型を指定した day と temp を使ってループし、各 day を出力して total に加算する
-- 3) total を出力する

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

自分で練習してみよう: Luauオンラインコンパイラ