인덱스 시그니처
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 72번째.
테이블 장에서 {[string]: number}와 같은 맵 타입을 본 적이 있습니다. 인덱스 시그니처입니다. any 문자열 키가 숫자 값에 매핑됩니다. 코드를 작성할 때 키를 알 수 없는 경우에 특히 유용합니다. 카운터, 설정, 캐시, 점수처럼 런타임에 구성되는 모든 것이 이에 해당합니다.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- 어떤 문자열 키든 허용됩니다
counts["sword"] = 1
counts["potion"] += 1 -- 값은 숫자로 검사됩니다맵을 사용할 때 중요한 런타임 동작은 두 가지입니다. 첫째, 한 번도 설정하지 않은 키를 읽으면 nil이 반환됩니다. 고전적인 카운팅 패턴에서는 or를 사용해 이를 처리하여 "missing"을 0으로 바꿉니다.
counts[item] = (counts[item] or 0) + 1둘째, pairs()는 맵의 키를 순서가 보장되지 않은 상태로 순회합니다. 같은 프로그램을 두 번 실행해도 키를 서로 다른 순서로 방문할 수 있습니다. 출력이 예측 가능해야 할 때는 키를 배열에 수집하고, table.sort로 정렬한 다음, 정렬된 배열을 대신 순회하세요.
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
end챌린지
쉬움타입이 지정된 맵으로 loot 드롭을 셉니다.
type Counts = {[string]: number}을 선언합니다.- 새로운
Counts맵을 생성하고 각 문자열이 나타나는 횟수를 세는countItems(items: {string}): Counts를 작성합니다((counts[item] or 0) + 1패턴을 사용하세요). local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}을 생성하고 이를 셉니다.- 서로 다른 각 item에 대해 알파벳 순서로
[name]: [count]줄을 하나씩 출력합니다. key를 수집하고table.sort한 다음 출력하세요.
예상 출력:
potion: 3
shield: 1
sword: 2직접 해보기
-- 여기에 코드를 작성하세요
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts를 (counts[item] or 0) + 1을 사용하여
-- 3) 작업의 loot 배열을 세세요
-- 4) 키를 모으고, table.sort로 정렬한 다음 `{name}: {count}` 줄을 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러