사전은 이름 또는 키를 값과 연결하는 테이블로, 인덱스 대신 사용됩니다.
예시:
local pet = {
Name = "Bobbie",
Type = "Dog",
}사전은 값을 레이블로 지정해야 할 때 사용하며, 배열처럼 단순히 순서대로 나열하는 것이 아닙니다. 이 튜토리얼에서 플레이어와 관련된 값을 조작하여 사전을 사용하는 연습을 해보세요.
사전 구문
배열과 마찬가지로 사전은 중괄호 {}로 변수를 할당합니다. 키-값 쌍은 각 줄에 저장되며, 뒤에 쉼표가 옵니다. 키와 값은 문자열, 숫자 및 변수 이름을 포함한 모든 데이터 유형일 수 있습니다.
local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])부품이나 다른 인스턴스화된 객체를 키로 참조하려면 대괄호를 사용합니다.
local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local 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을 가져오는 변수를 추가하고, 테스트를 위한 print 문을 추가합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("안녕 " .. name)endplayerPoints 사전에 name을 키로 삽입하고, 값인 플레이어의 점수를 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) do
print(key .. "는 " .. value .. "입니다.")
endpairs()는 사전 요소의 키, 값 또는 둘 다를 작업하는 데 사용할 수 있습니다. 아래의 for 루프에서 첫 번째 변수는 키입니다. 두 번째 변수는 값입니다. 작업할 사전은 pairs()에 전달됩니다.
local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("당신은 가지고 있습니다:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end실행하면 코드는 다음과 같이 출력됩니다:
당신은 가지고 있습니다:
43 Gold Bricks
3 Carrots
2 Torches요약
사전은 인덱스 값 대신 키-값 쌍을 사용하는 테이블입니다. 사전과 배열은 중괄호를 변수에 할당하여 비슷하게 시작합니다. 항목은 쉼표로 구분합니다.
사전 내의 모든 키는 동일한 데이터 유형을 사용해야 하지만, 값은 데이터 유형을 혼합해도 문제가 없습니다.
사전에 접근하는 방식은 그 목적을 전달할 수 있습니다. 적 속성의 사전은 점 연산자로 접근할 가능성이 높고, 이름 목록은 tableName[keyName]을 사용할 가능성이 높습니다.
대괄호를 사용할 때 주의하세요; 테이블 내에서 생성된 키 이름은 문자열로 취급해야 합니다: tableName["keyName"]. 그러나 부품과 같은 객체를 참조할 때는 따옴표가 필요하지 않습니다: tableName[keyName].
많은 스크립트가 사전이나 배열을 통해 반복해야 하지만, 이러한 데이터 구조의 시작과 끝을 항상 알 수는 없습니다. 예를 들어, 플레이어의 사전이 변경되거나 플레이어가 다양한 크기의 배열 인벤토리를 가질 수 있습니다.
이러한 상황에서는 pairs() 및 ipairs()를 사용하여 시작과 끝 지점이 알려지지 않은 각 요소를 반복할 수 있습니다. 또한 in 키워드를 통해 요소를 반복할 수 있으며, pairs() 또는 ipairs()가 필요하지 않습니다.