web-dev-qa-db-ja.com

Luaで配列値をループする

次のような変数があります

local armies = {
    [1] = "ARMY_1",
    [2] = "ARMY_3",
    [3] = "ARMY_6",
    [4] = "ARMY_7",
}

次に、各値に対してアクションを実行したいと思います。値をループする最良の方法は何ですか?私がインターネットで見つけている典型的なものはこれです:

for i, armyName in pairs(armies) do
    doStuffWithArmyName(armyName)
end

その結果、未使用の変数iが発生するため、気に入らない。次のアプローチはそれを回避し、私が現在使用しているものです。

for i in pairs(armies) do
    doStuffWithArmyName(armies[i])
end

ただし、これは、キーを繰り返し処理し、キーを使用して(命令的に)値を取得するため、読みやすく簡単ではありません。私が両方のアプローチで得たもう1つの恩恵は、pairsが必要であることです。ここでループされる値は私が制御できる値であり、できるだけ簡単にループできることが望ましいです。

値だけを気にする場合、そのようなループを実行するより良い方法はありますか?リストした懸念事項に対処する方法はありますか?

私はLua 5.0を使用しています(そしてこの言語はかなり新しいです)

11
Jeroen De Dauw

配列を反復する慣用的な方法は次のとおりです。

for _, armyName in ipairs(armies) do
    doStuffWithArmyName(armyName)
end

ご了承ください:

  1. 配列にはipairspairsよりも使用
  2. キーが目的のものでない場合は、_をプレースホルダーとして使用してください。

何らかの理由で、その_プレースホルダーが引き続き問題になる場合は、独自のイテレーターを作成してください。 Luaでのプログラミングは例としてそれを提供します:

function values(t)
  local i = 0
  return function() i = i + 1; return t[i] end
end

使用法:

for v in values(armies) do
  print(v)
end
27
Yu Hao