사전은 인덱스 대신 이름이나 키 를 값과 연결하는 테이블입니다.
예제:
루아 사전 구문
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("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
사용할 스타일은 일반적으로 테이블의 목적에 따라 결정됩니다.서버에서 플레이어 목록과 같은 값 모음을 보유하는 테이블의 경우, 코더는 일반적으로 tableName["keyName"]를 사용합니다.개체를 설명하는 사전에서는 코더가 tableName.keyName를 사용할 가능성이 더 높습니다.
단어 사전 값 변경
키의 값을 변경하는 것은 다른 변수와 동일합니다; 같은 = 연산자를 사용하십시오.
아래의 enemy 표에서 적의 이름을 다른 것으로 설정합니다.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)출력 창을 플레이테스트하고 확인합니다.
기존 변수를 키로 사용
사전은 스크립트의 다른 부분에서 선언된 미리 정의된 변수와 상호작용할 수 있습니다.다음 코딩 예제에서는 변수를 사용하여 플레이어의 이름을 키로 추가하고 경험에 참여한 후 점 값을 0으로 설정합니다.
In ServerScriptService 에서, PlayerPoints라는 새로운 스크립트를 만듭니다스크립트에서 플레이어 서비스를 가져와 playerPoints라는 빈 사전을 만듭니다.
local Players = game:GetService("Players")local playerPoints = {}새 플레이어 변수에 대한 매개변수로 로컬 함수를 코딩하여 플레이어 포인트를 설정합니다. 함수를 Players.PlayerAdded 이벤트에 연결합니다.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)함수에서 변수를 추가하여 플레이어의 Name , 모든 플레이어 개체의 속성 및 테스트를 위한 인쇄 문을 가져옵니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end키로 사전에 를 삽입하고, 값, 플레이어의 포인트를 0으로 설정합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endname를 사용하여 플레이어의 이름을 인쇄하고 playerPoints[name]를 사용하여 변수와 일치하는 키의 값을 인쇄합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")end프로젝트를 실행하고 결과를 관찰합니다.
완성된 스크립트
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
선택적 도전
아래는 다양한 방식으로 사전을 사용하는 데 적용되는 몇 가지 도전입니다. 이것들에 대한 코드를 작성할 수 있는지 확인하십시오.
- 플레이어에게 시간이 지남에 따라 피해를 주는 트랩 부품을 만듭니다. 플레이어가 트랩을 터치하면 피해를 입히고, 대기한 다음 다시 피해를 입을 수 있도록 허용합니다.
- 사전에 액세스하여 두 플레이어 중 가장 많은 포인트를 보유하는 플레이어를 확인하는 함수를 만듭니다.
- 암호를 생성하여 한 문자열을 다른 문자열로 교환하여 "비밀" 코드를 생성합니다.예를 들어, 문자 "A"는 "G"와 바꿀 수 있고, 단어 "애플"은 "오렌지"와 바꿀 수 있습니다.
사전과 pairs()
pairs() 는 종종 사전 을 반복하는 데 사용되는 함수입니다. 아래 예제를 참조하십시오
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 사전 요소의 키, 값 또는 둘 모두와 작업할 수 있습니다.아래의 for 루프에서 첫 번째 변수는 키입니다.두 번째 변수는 값입니다.작업하려는 사전이 pairs() 에 전달됩니다.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
실행되면 코드는 다음을 출력합니다:
You have:43 Gold Bricks3 Carrots2 Torches
개요
사전은 인덱스된 값 대신 키-값 쌍을 사용하는 테이블입니다.사전과 배열은 변수에 굵은 괄호를 할당하여 비슷하게 시작합니다.쉼표로 구분된 항목을 유지합니다.
사전 내의 모든 키는 동일한 데이터 유형을 사용해야 하지만, 값은 문제 없이 데이터 유형을 혼합할 수 있습니다.
사전에 액세스하는 방법은 그 목적을 전달할 수 있습니다.적의 속성 사전은 점 연산자로 액세스될 가능성이 높으며, 이름 목록은 tableName[keyName] 를 사용할 가능성이 높습니다.
괄호를 사용할 때는 주의하십시오; 테이블 내에서 생성된 키 이름은 문자열로 처리해야 합니다: tableName["keyName"] .그러나 부품과 같은 개체를 참조할 때 따옴표가 필요하지 않습니다: tableName[keyName].
많은 스크립트가 사전이나 배열을 거쳐야 하지만, 이러한 데이터 구조의 시작과 끝을 항상 알 수는 없습니다.예를 들어, 플레이어 사전이 변경되거나, 플레이어가 다양한 크기의 배열 인벤토리를 가질 수 있습니다.
이러한 상황에서는 및 를 사용하여 알려진 시작 및 끝점이 없는 루프에서 각 요소를 순회할 수 있습니다.또한 in 키워드를 통해 일반 반복을 사용하여 요소를 pairs() 또는 ipairs() 없이 루프할 수 있습니다.