Menu
CoddyTech

인덱스 시그니처

Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 78번째.

테이블 단원에서 {[string]: number}와 같은 맵 타입을 배웠습니다. 이것은 인덱스 시그니처입니다. 모든 문자열 키가 숫자 값에 대응합니다. 코드를 작성할 때 키를 미리 알 수 없는 경우 유용합니다. 카운터, 설정, 캐시, 점수처럼 런타임에 만들어지는 모든 것에 사용할 수 있습니다.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- 모든 문자열 키를 사용할 수 있습니다
counts["sword"] = 1
counts["potion"] += 1  -- 값이 숫자인지 검사합니다

맵을 사용할 때는 두 가지 런타임 동작을 알아 두어야 합니다. 첫째, 설정된 적이 없는 키를 읽으면 nil이 반환됩니다. 일반적인 카운팅 패턴에서는 or를 사용해 "누락된" 값을 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
challenge icon

챌린지

쉬움

미리 이름을 알 수 없는 플레이어의 점수를 저장하세요.

  1. type Scores = {[string]: number}을 작성하고 local scores: Scores = {}를 만드세요.
  2. 점수를 추가하세요. scores["mia"] = (scores["mia"] or 0) + 5를 작성한 다음, "leo"에도 3을 더하세요.
  3. scores["mia"], scores["leo"], scores["zed"]를 출력하세요.

Run Code를 누르세요. 출력은 5, 3, nil을 표시합니다.

직접 해보기

-- 1) type Scores = {[string]: number}를 선언한 다음, local scores: Scores = {}를 작성하세요
-- 2) "mia"에 5점, "leo"에 3점을 추가하세요
-- 3) mia, leo, zed를 출력하세요

Luau 소개의 모든 레슨

직접 연습해 보세요: 온라인 Luau 컴파일러