[解決済み] LuaのFor Loop
質問
私の課題は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
という変数が定義されていることです。
names
で定義されていたという事実は全く関係ありません。どのような
names
を使用した場合、for ループの内部では
ローカル
を参照します。
forループでは、ループの内側が
names = 1
で、次に
names = 2
であり、最後に
names = 3
. for ループでは
カウンタ
を宣言し、最初の数から最後の数までカウントし、カウントした値ごとに内部のコードを呼び出します。
あなたが実際に望んでいたのは、このようなものでした。
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
Luaのテーブルのメンバーには、[]構文でアクセスします。Luaのテーブルは、quot;キーとquot;値をマッピングします。配列は、自動的に整数型のキーを作成し、増加します。つまり、テーブル内の"Joe"に関連するキーは2です(Luaのインデックスは常に1から始まっています)。
したがって、1から3までカウントするforループが必要であり、これを取得します。テーブルから要素にアクセスするために、count変数を使用します。
しかし、これには欠点があります。もし、リストから要素の一つを削除したらどうなるでしょうか?
names = {'John', 'Joe'}
for nameCount = 1, 3 do
print (names[nameCount])
end
では、次のようになります。
John Joe nil
となります。なぜなら、存在しないテーブルの値にアクセスしようとすると
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
の値はそのインデックスの値です。つまり、基本的に多くの作業を代行してくれるわけです。
関連
-
[解決済み] Rustで範囲指定はどうやるの?
-
[解決済み] Angular 2 formArraysに指定されていないname属性を持つコントロールが見つからない
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] C#のループ - breakとcontinue
-
[解決済み] Bashでの単一行whileループの構文
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular 2 formArraysでname属性が指定されていないコントロールが見つからない。
-
[解決済み] フローチャートでネストしたforループを表示する
-
[解決済み] MIPSで階乗を行うコードはどのように書くのですか?
-
[解決済み] GAMSでマクロ/ループを作成する
-
[解決済み] AutoHotKeyのホットキーでSetTimerをオフに切り替えるには?
-
[解決済み] Rustで範囲指定はどうやるの?
-
[解決済み] Angular 2 formArraysに指定されていないname属性を持つコントロールが見つからない
-
[解決済み] マップの全キーに対する反復処理
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
-
[解決済み] Kotlin の `forEach` における `break` と `continue` について