pairs와 ipairs로 테이블 반복하기
pairs()와 ipairs()를 사용해 테이블을 안전하게 순회합니다.
pairs와 ipairs로 테이블 반복하기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
ipairs: 순서가 있는 배열 순회
ipairs(t)는 인덱스 1부터 시작하는 정수 시퀀스를 순회하며 (index, value) 쌍을 반환합니다. 첫 번째 nil에서 중단됩니다. 순서가 중요한 배열 형태의 테이블에는 안전하고 예측 가능한 선택입니다.
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs: 모든 키
pairs(t)는 테이블의 nil이 아닌 모든 키-값 쌍을 지정되지 않은 순서로 순회합니다. 내부적으로 next() 함수를 사용합니다. 사전이나 여러 형식이 섞인 테이블을 순회하거나 형식에 관계없이 모든 키를 방문해야 할 때 pairs를 사용합니다.
local info = {name="Lua", version=5.4, embedded=true}
for k, v in pairs(info) do
print(k, v)
end
-- name Lua
-- version 5.4
-- embedded true (order may vary)pairs와 ipairs 중 선택하기
순차적인 배열에는 ipairs를 사용합니다(순서가 보장되고 nil에서 중단됨). 사전이나 여러 형식이 섞인 테이블, 또는 모든 키가 필요할 때는 pairs를 사용합니다. 배열에 pairs를 사용해도 동작하지만 순서는 보장되지 않습니다. 사전에 ipairs를 사용하면 정수가 아닌 키를 놓칩니다.
local mixed = {10, 20, label="hello", 30}
-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
io.write(v .. " ")
end
print() -- 10 20 30
-- pairs: sees everything
for k, v in pairs(mixed) do
print(k, v)
end요소 개수 세기
시퀀스에서는 #t가 개수를 반환합니다. 사전에서는 #t를 신뢰할 수 없으므로 pairs로 순회하며 직접 개수를 셉니다. 이는 여러 형식이 섞였거나 문자열 키를 사용하는 테이블에서 버그를 방지하는 중요한 차이입니다.
local arr = {10, 20, 30}
print("#arr:", #arr) -- 3 (reliable)
local dict = {a=1, b=2, c=3}
print("#dict:", #dict) -- 0 (unreliable for dicts!)
local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count) -- 3순회 중 값 수정하기
pairs로 순회하는 동안 기존 키의 값을 안전하게 업데이트할 수 있습니다. 그러나 순회 중에 키를 추가하거나 제거하면 동작이 정의되지 않습니다. 변경 사항을 모은 뒤 반복문이 끝난 후 적용하십시오.
local prices = {apple=1.0, banana=0.5, cherry=2.0}
-- Safe: update existing values
for k, v in pairs(prices) do
prices[k] = v * 1.1 -- 10% markup
end
for k, v in pairs(prices) do
print(k, string.format("%.2f", v))
end키 수집
결정적인 출력을 위해 모든 키를 정렬된 배열에 모으는 작업을 자주 수행합니다. pairs로 순회하여 키를 수집한 다음 table.sort를 사용해 정렬합니다.
local config = {host="localhost", port=8080, debug=true}
local keys = {}
for k in pairs(config) do
keys[#keys+1] = k
end
table.sort(keys)
for _, k in ipairs(keys) do
print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080중첩 테이블 순회
중첩 테이블(테이블로 이루어진 테이블)에서는 두 개의 반복문을 함께 사용합니다. 바깥 반복문은 최상위 수준을 순회하고, 안쪽 반복문은 각 중첩 테이블을 순회합니다. 이 패턴에 재귀를 사용하면 깊이에 관계없이 중첩된 구조를 처리할 수 있습니다.
local matrix = {
{1,2,3},
{4,5,6},
{7,8,9},
}
for i, row in ipairs(matrix) do
for j, val in ipairs(row) do
io.write(string.format("%3d", val))
end
print()
endipairs로 필터링하기
ipairs로 순회하면서 조건자를 통과한 요소를 추가하여 필터링된 목록을 만듭니다. 결과는 조건에 맞는 요소만 포함하는 새 배열입니다.
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " ")) -- 2 4 6 8 10ipairs로 매핑하기
모든 요소에 변환을 적용합니다. 요소를 순회하면서 변환된 값으로 새 배열을 만듭니다. 이는 함수형 언어의 map()에 해당하는 Lua 방식입니다.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do
result[i] = fn(v)
end
return result
end
local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " ")) -- 2 4 6 8 10
local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " ")) -- HELLO WORLD사용자 지정 반복자에서 pairs 사용하기
함수에서 반복자와 상태를 반환하면 사용자 지정 객체를 순회 가능하게 만들 수 있습니다. 이 패턴은 내부에서 pairs가 동작하는 방식과 유사하며, next, t, nil을 반환합니다. 반복자 생성 함수도 이와 비슷하게 함수와 선택적 상태를 반환합니다.
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({"x","y","z"}) do
print(v)
end
-- x
-- y
-- z빠른 확인
pairs()와 ipairs()에 대한 설명 중 옳은 것은 무엇입니까?
복습: pairs와 ipairs
요약:
ipairs: 순서가 있으며, 1부터 시작하는 정수 키를 사용하고 nil에서 중단됩니다pairs: 모든 키를 순회하며, 순서는 임의이고 도중에 일찍 중단되지 않습니다- 사전에는
pairs를, 배열에는ipairs를 사용합니다 - pairs 순회 중에는 키를 추가하거나 제거하지 마십시오. 기존 값의 업데이트는 안전합니다
- 결정적인 출력을 위해 키를 모은 후 정렬합니다
자주 묻는 질문
“pairs와 ipairs로 테이블 반복하기” 강의는 무료인가요?
네 — “pairs와 ipairs로 테이블 반복하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“pairs와 ipairs로 테이블 반복하기”에서 뭘 배우나요?
pairs()와 ipairs()를 사용해 테이블을 안전하게 순회합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“pairs와 ipairs로 테이블 반복하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 배열로 사용하는 테이블
- 사전으로 사용하는 테이블
- pairs와 ipairs로 테이블 반복하기
- 중첩 테이블과 구조화된 데이터