私の割り当ては、forループの実行方法です。私は数字の観点からそれを理解しましたが、名前の観点からそれを理解することはできません。名前のリストを実行するforループを作成したいと思います。以下は私がこれまでに持っているものです:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
他のことを試してみましたが、うまくいきません。端末には常に1、2、3と表示されます。
あなたの問題は簡単です:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
このコードは、最初にnames
というグローバル変数を宣言します。次に、forループを開始します。 forループは、たまたまnames
と呼ばれるlocal変数を宣言します。変数が以前にnames
で定義されていたという事実は完全に無関係です。 forループ内でnames
を使用すると、グローバルではなくlocalが参照されます。
Forループは、ループの内部がnames = 1
、次にnames = 2
、最後にnames = 3
で呼び出されることを示しています。 forループは、最初の数から最後の数までカウントするcounterを宣言し、カウントする値ごとに1回、内部コードを呼び出します。
あなたが実際に欲しかったのは次のようなものでした:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
[]構文は、Luaテーブルのメンバーにアクセスする方法です。 Luaテーブルは「キー」を「値」にマッピングします。配列は整数型のキーを自動的に作成しますが、増加します。したがって、テーブル内の「Joe」に関連付けられているキーは2です(Luaインデックスは常に1から始まります)。
したがって、1から3までカウントするforループが必要です。 count変数を使用して、テーブルから要素にアクセスします。
ただし、これには欠陥があります。リストから要素の1つを削除するとどうなりますか?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
存在しないテーブルの値にアクセスしようとするとnil
になるため、John Joe nil
を取得します。これを防ぐには、テーブルの1から長さまでカウントする必要があります。
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
#
は長さ演算子です。テーブルと文字列で機能し、いずれかの長さを返します。現在、names
がどれだけ大きくても小さくても、これは常に機能します。
ただし、アイテムの配列を反復処理するより便利な方法があります。
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairs
は、リストを反復処理するLua標準関数です。ループの反復子であるこのスタイルのfor
ループは、この種の反復子関数を使用します。 i
値は、配列内のエントリのインデックスです。 name
値は、そのインデックスの値です。だから、基本的にはあなたのために多くの無骨な仕事をします。
オンラインで読むと( tables tutorial )テーブルは配列のように振る舞うように見えるので、探しているものは:
Way1
names = {'John', 'Joe', 'Steve'}
for i = 1,3 do print( names[i] ) end
Way2
names = {'John', 'Joe', 'Steve'}
for k,v in pairs(names) do print(v) end
Way1はテーブルindex/key
を使用し、テーブルnames
で各要素には1から始まるキーがあります。例:
names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John
したがって、i
を1から3に変更するだけです。
OnWay2代わりに、実行するテーブルを指定し、キーと値に変数を割り当てます。例:
names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end
次を印刷します。
1 John
2 Joe
myKey myValue
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
試してください:
names = {'John','Joe','Steve'}
for i = 1,3 do
print(names[i])
end