developer tip

Lua의 For 루프

optionbox 2020. 10. 18. 09:21
반응형

Lua의 For 루프


내 과제는 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은 완전히 관련이 없습니다. namesfor 루프 내부의 모든 사용은 전역 루프가 아닌 로컬 루프를 참조합니다 .

for 루프는 루프의 내부 부분이 names = 1, then names = 2및 finally 로 호출 될 것이라고 말합니다 names = 3. for 루프는 첫 번째 숫자부터 마지막 ​​숫자까지 계산 하는 카운터선언하고 계산하는 각 값에 대해 내부 코드를 한 번씩 호출합니다.

실제로 원했던 것은 다음과 같습니다.

names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
  print (names[nameCount])
end

[] 구문은 Lua 테이블의 멤버에 액세스하는 방법입니다. Lua 테이블은 "키"를 "값"에 매핑합니다. 배열은 정수 유형의 키를 자동으로 생성하여 증가합니다. 따라서 테이블에서 "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루프 인 반복기 for 루프는 이러한 종류의 반복기 함수를 사용합니다. i값 어레이에서 엔트리의 인덱스이다. name값은 해당 인덱스의 값입니다. 그래서 그것은 기본적으로 당신을 위해 많은 지저분한 일을합니다.


By reading online (tables tutorial) it seems tables behave like arrays so you're looking for:

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 uses the table index/key , on your table names each element has a key starting from 1, for example:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John

So you just make i go from 1 to 3.

On Way2 instead you specify what table you want to run and assign a variable for its key and value for example:

names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end

prints the following:

1   John
2   Joe
myKey   myValue

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end
  1. You're deleting your table and replacing it with an int
  2. You aren't pulling a value from the table

Try:

names = {'John','Joe','Steve'}
for i = 1,3 do
    print(names[i])
end

참고URL : https://stackoverflow.com/questions/7616260/for-loop-on-lua

반응형