Lua에서 ipair와pair의 차이

2071 단어
먼저 공식 수첩의 설명을 봅시다.
 
  
pairs (t)If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.
Otherwise, returns three values: the next function, the table t, and nil, so that the construction
     for k,v in pairs(t) do body end
will iterate over all key�Cvalue pairs of table t.
See function next for the caveats of modifying the table during its traversal.

ipairs (t)If t has a metamethod __ipairs, calls it with t as argument and returns the first three results from the call.
Otherwise, returns three values: an iterator function, the table t, and 0, so that the construction
     for i,v in ipairs(t) do body end
will iterate over the pairs (1,t[1]), (2,t[2]), ..., up to the first integer key absent from the table.


원래pairs는 테이블의 모든 키 값이 맞습니다.만약 쥐 아저씨의 루아 간단명료한 강좌를 보았다면, 테이블이 키 값이 맞는 데이터 구조라는 것을 알 수 있을 것이다.
ipairs는 키 값 1부터 고정적으로 시작하여 다음 키에 1을 누적하여 옮겨다니며 키에 대응하는value가 존재하지 않으면 옮겨다니기를 멈춘다.겸사겸사 기억도 간단하다. i를 가진 것은 인덱스 키 값에 따라 1부터 옮겨다니는 것이다.
예를 보여 주세요.
 
  
tb = {"oh", [3] = "god", "my", [5] = "hello", [6] = "world"}

for k,v in ipairs(tb) do
     print(k, v)
end


출력 결과는 다음과 같습니다.
 
  
1       oh
2       my
3       god

tb는 tb[4]가 존재하지 않기 때문에 여기까지 돌아다녔습니다.
 
  
for k,v in pairs(tb) do
     print(k, v)
end

결과 출력:
 
  
1       oh
2       my
3       god
6       world
5       hello

우리는 모든 내용을 출력할 것이라고 짐작할 수 있다.그러나 출력의 순서가 tb의 순서와 다르다는 것을 발견했다.
만약 우리가 순서대로 출력하려고 한다면 어떻게 합니까?방법 중 하나는 다음과 같습니다.
 
  
for i = 1, #tb do
     if tb[i] then
          print(tb[i])
     else
end

물론 단지 하나의 수조일 뿐이라면 ipairs도 문제없다.
이상

좋은 웹페이지 즐겨찾기