사전은 인덱스가 아닌 값과 이름을 매핑하는 테이블입니다.
예:
루아 사전 구문
local pet = {Name = "Bobbie",Type = "Dog",}
값에 레이블을 지정해야 할 때 사전을 사용하십시오, 배열처럼 목록을 나열하는 대신 -practice using dictionaries in this tutorial by manipulating values associating a 플레이어.
사전 구문
쿼리 문자열, 사전 및 키 값 쌍은 부울 문자열, 숫자 및 변수 이름을 포함하여 서로 다른 줄에 저장됩니다. 키 값 및 값은 문자열, 숫자 및 변수 이름을 포함하여 모든 데이터 입력지원합니다.
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 , 플레이어 포인트라는 이름의 새 스크립트를 생성합니다. 스크립트에서 플레이어 서비스를 가져오고 빈 사전을 만드는 등 빈 디사이어를 만듭니다.
local Players = game:GetService("Players")local playerPoints = {}새로운 플레이어 변수에 대한 매개 변수로 플레이어 포인트를 설정하는 로컬 함수를 코드화합니다. Class.Players.PlayerAdded 이벤트에 함수를 연결하십시오.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)함수에서 플레이어의 Name , 모든 Player 개체의 속성 및 테스트용 출력 문을 추가합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end이름을 playerPoints 사전에 키로 입력하고 값, 플레이어의 포인트,를 0으로 설정합니다.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUse name 를 사용하여 플레이어의 이름과 플레이어Points[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() 는 종종 사전을 반복하는 함수입니다. 예는 아래에서 볼 수 있습니다.
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
요약
사전은 키 값 쌍을 인덱싱된 값이 아닌 텍스트 값을 사용하는 테이블입니다. 사전과 배열은 모두 변수에 대해 컴마를 사용하여 별도로 구분합니다. 입력을 쉼표로 구분합니다.
사전 내의 모든 키는 동일한 데이터 입력사용해야 하지만 값은 문제 없이 데이터 형식을 혼합할 수 있습니다.
사전의 액세스 스타일은 사전의 목적을 전달할 수 있습니다. 적의 속성 사전에 대한 액세스는 dot 연산자로 액세스할 것입니다. 이름 목록에 대한 액세스는 tableName[keyName]을 사용하는 것이 좋습니다.
부호를 사용할 때 주의하십시오; 테이블 내에서 만든 키 이름은 문자열로 취급해야 합니다: tableName["keyName"] 그러나 부품과 같은 개체에 대해 참조할 때는 따옴표가 필요 없습니다: tableName[keyName] .
많은 스크립트는 사전이나 배열을 통해 이동해야 하지만, 시작 및 종료 크기가 항상 변경되는 데이터 구조의 시작 및 종료 크기를 알 수는 없습니다. 예를 들어, 플레이어의 사전이 변경되거나 플레이어의 배열 인벤토리가 다양한 크기를 가질 수 있습니다.
이러한 상황에서 pairs() 및 ipairs() 을 사용하여 시작점이 없는 각 요소를 통과하는 for 루프에서 각 요소를 반복할 수 있습니다. 또한 2> in2> 키워드를 통해 시