사전은 이름 또는 키를 값과 연결하는 테이블입니다. 인덱스 대신에 말이죠.
예제:
Luau 사전 구문local pet = {Name = "Bobbie",Type = "Dog",}
사전은 값을 레이블로 지정해야 할 때 사용합니다. 배열처럼 단순히 순서대로 나열하는 것이 아닙니다. 이 튜토리얼을 통해 플레이어와 연관된 값을 조작하여 사치를 사용하는 연습을 해보세요.
사전 구문
배열과 마찬가지로 사전은 중괄호 {}로 변수를 할당받습니다. 키-값 쌍은 각기 다른 줄에 표시되고 뒤에 쉼표가 옵니다. 키와 값은 문자열, 숫자 및 변수 이름을 포함한 모든 데이터 유형일 수 있습니다.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
부분 또는 다른 인스턴스화된 객체를 키로 참조하려면 대괄호를 사용하십시오.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
사전 만들기
사전의 일반적인 사용 방법 중 하나는 플레이어나 캐릭터 정보를 조직하는 것입니다. 이러한 단계에서는 가상의 적 캐릭터 정보를 저장하고 액세스하는 방법을 살펴봅니다.
새 스크립트에서 enemy라는 이름의 사전을 생성합니다.
local enemy = {}사전의 첫 번째 키는 적의 이름을 추적하는 데 사용되는 변수인 Name입니다.
local enemy = {Name}키에 적의 이름을 할당하고 뒤에 쉼표를 추가합니다.
local enemy = {Name = "Spike",}적이 얼마나 많은 체력을 가져야 하는지를 위한 두 번째 키-값 쌍을 추가합니다. 키는 항상 동일한 데이터 유형을 사용해야 하지만, 값은 다를 수 있습니다.
local enemy = {Name = "Spike",Health = 1000,}
사전 값 사용하기
사전 값을 액세스하는 방법에는 두 가지가 있습니다:
- tableName["keyName"] (중요하게도, 인용부호를 주의하십시오)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("악당 " .. enemy["Name"] .. "가 다가옵니다!")print("악당 " .. enemy.Name .. "가 다가옵니다!")
어떤 스타일을 사용할지는 일반적으로 테이블의 용도에 따라 다릅니다. 서버에서 플레이어 목록과 같은 값 모음을 보관하는 테이블의 경우, 코더는 일반적으로 tableName["keyName"]을 사용합니다. 객체를 설명하는 데 사용되는 사전의 경우, 코더는 tableName.keyName을 사용할 가능성이 더 높습니다.
사전 값 변경하기
키의 값을 변경하는 것은 다른 변수와 동일합니다; 등호 = 연산자를 사용하십시오.
enemy 테이블 아래에서 적의 이름을 다른 것으로 설정합니다.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("적의 이름은 " .. enemy.Name)플레이 테스트를 진행하고 출력 창을 확인하십시오.
기존 변수를 키로 사용하기
사전은 스크립트의 다른 부분에서 선언된 기존 변수와 상호작용할 수 있습니다. 다음 코딩 예제는 사용자가 경험에 가입할 때 플레이어의 이름을 키로 추가하고 점수 값을 0으로 설정하는 변수를 사용합니다.
ServerScriptService에서 PlayerPoints라는 새 스크립트를 생성합니다. 스크립트 내에서 Players 서비스를 가져오고 빈 사전 playerPoints를 만듭니다.
local Players = game:GetService("Players")local playerPoints = {}플레이어 점수를 설정하기 위한 지역 함수를 코딩하고 새 플레이어 변수의 매개변수를 추가합니다. 이 함수를 Players.PlayerAdded 이벤트에 연결합니다.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)함수 내에서 플레이어의 Name, 모든 Player 객체에 있는 속성을 가져오기 위한 변수를 추가하고 테스트를 위한 print 문을 작성합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("안녕 " .. name)endname을 playerPoints 사전에 키로 추가하고 값을 플레이어의 점수를 0으로 설정합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("안녕 " .. name)playerPoints[name] = 0endname을 사용하여 플레이어의 이름을 출력하고 playerPoints[name]를 사용하여 변수와 일치하는 키의 값을 출력합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("안녕 " .. name)playerPoints[name] = 0print(name .. "의 점수는 " .. playerPoints[name] .. "입니다.")end프로젝트를 실행하고 출력을 관찰하십시오.
완성된 스크립트
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("안녕 " .. name)
playerPoints[name] = 0
print(name .. "의 점수는 " .. playerPoints[name] .. "입니다.")
end
Players.PlayerAdded:Connect(setPoints)
선택적 도전 과제
다양한 방식으로 사전을 사용하는 데 적용되는 도전 과제가 아래에 나와 있습니다. 이 코드들을 완성할 수 있는지 보십시오.
- 시간에 따라 플레이어에게 피해를 주는 함정 파트를 만듭니다. 플레이어가 함정에 닿으면 피해를 주고, 기다린 후에 다시 피해를 줄 수 있도록 합니다.
- 사전을 통해 두 플레이어 중 누가 더 많은 점수를 가지고 있는지 확인하는 함수를 만드십시오.
- 문자열을 다른 문자열로 바꾸어 "비밀" 코드를 만드는 암호 시스템을 만드십시오. 예를 들어, 문자 "A"를 "G"와 교환하거나, 단어 "apple"을 "orange"로 교환하는 것입니다.
사전과 pairs()
pairs()는 종종 사전을 반복하는 데 사용되는 함수입니다. 아래에 예제입니다.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. "은 " .. value .. "입니다.")end
pairs()는 사전 요소의 키, 값 또는 둘 다와 함께 작업하는 데 사용할 수 있습니다. 아래의 for 루프에서 첫 번째 변수는 키입니다. 두 번째 변수는 값입니다. 작업할 사전은 pairs()에 전달됩니다.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("당신은 다음을 가지고 있습니다:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
실행할 때 코드는 다음과 같은 출력을 인쇄합니다:
당신은 다음을 가지고 있습니다:43 Gold Bricks3 Carrots2 Torches
요약
사전은 키-값 쌍을 사용하여 인덱스 값 대신 테이블입니다. 사전과 배열은 중괄호를 변수가 할당되는 것으로 시작하여 유사하게 시작합니다. 모든 항목은 쉼표로 구분되어야 합니다.
사전 내의 모든 키는 동일한 데이터 유형을 사용해야 하지만, 값은 데이터 유형을 혼합하는 것에 문제가 없습니다.
사전이 액세스되는 방식은 그 용도를 전달할 수 있습니다. 적 특성의 사전은 점 연산자로 액세스되는 경향이 있는 반면, 이름 목록은 tableName[keyName]을 사용하여 액세스될 가능성이 높습니다.
대괄호를 사용할 때 주의하십시오. 테이블 내에서 생성된 키 이름은 문자열로 처리되어야 합니다: tableName["keyName"]. 그러나 파트와 같은 객체를 참조할 때는 인용 부호가 필요하지 않습니다: tableName[keyName].
많은 스크립트가 사전이나 배열을 통해 진행해야 하지만, 이러한 데이터 구조의 시작과 끝을 항상 알 수는 없습니다. 예를 들어, 플레이어의 사전은 변경되거나 플레이어는 크기가 다양한 배열 인벤토리를 가질 수 있습니다.
이러한 상황에서는 pairs() 및 ipairs()를 사용하여 시작과 끝점이 알려지지 않은 각 요소를 반복할 수 있습니다. in 키워드를 통해 요소를 반복할 수도 있으며 이 경우 pairs()나 ipairs()가 필요하지 않습니다.