배열의 콘텐츠는 종종 변경해야 하는 경우가 많습니다. 예를 들어, 플레이어의 인벤토리에서 항목을 삭제해야 할 때 사용하기 위해 Lua에는 미리 구축된 함수 가 있습니다.
이 문서에서는 값을 검색하는 방법을 설명하면서 테이블에 대한 미리 빌드 함수를 설명합니다.
이 스킬을 적용하려면 게임에서 플레이어의 인벤토리를 관리하는 스크립트를 생성합니다.
배열에 값 추가
배열에 새 값을 추가하려면 table.insert(array, valueToInsert) 를 사용합니다. 두 번째 매개 변수는 문자열, 숫자 또는 전체 개체와 같은 값을 사용할 수 있습니다. Player 또는 IntValue 와 같은.
연습을 위해 테이블에 플레이어 아이템을 저장한 다음 추가하는 스크립트를 만듭니다. 이 예는 단지 스크립트이므로 모든 파일 또는 프로젝트에 사용할 수 있습니다. 코드를 테스트하는 방법은 출력 창을 사용하여 수행됩니다.
Empty 배열 생성 playerItems .
playerItems = {}배열에 인벤토리 항목을 추가하려면 table.insert() 를 입력하십시오. 부모 따옴표에서 playerItems , 추가할 테이블을 입력하십시오, 각 아이템대한 문자열 다음에 있습니다. 최소 3개의 값을 삽입합니다.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)프로젝트를 실행합니다. 출력에서 세 점 ...을 확장하여 인쇄된 테이블을 표시합니다.
배열에서 값 제거
값을 제거하려면, 예를 들어 플레이어가 아이템을 사용하거나 활성 플레이어 목록의 플레이어가 경험을 떠나면 table.remove() 를 사용합니다. 제공된 매개 변수에 따라 함수는 테이블의 마지막 값을 제거하거나 특정 인덱스에서 제거할 수 있습니다.
마지막 값 제거
스크립트에서 특정 아이템제거해야 하는 경우가 있습니다. 예를 인스턴스, 플레이어의 인벤토리에서 첫 번째 항목을 제거하거나 첫 번째 플레이어를 목록에서 선택하는 등입니다. 배열의 마지막 값을 제거하려면 table.remove(arrayName) 를 사용합니다. 이 사용 사례에서 필요한 유일한
이전 예시의 아이템 배열을 사용합니다. 그런 다음 테이블에서 마지막 값을 제거하려면 "Sleeping Bag"을 입력하십시오. 이 경우 table.remove(playerItems)을 입력하십시오.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)프로젝트를 실행합니다. 출력 창에서 마지막 값, "Sleeping Bag" ,을 표시하지 않아야 합니다.
인덱스로 제거
배열의 특정 위치에서 값을 제거하려면 두 번째 매개 변수 인덱스를 입력하여 제거하십시오, 예를 들어 table.remove(arrayName, 1).
동일한 테이블을 사용하여 table.remove() 를 입력합니다. 매개 변수에서 테이블 이름을 입력하고 1 를 입력하여 제거할 값을 입력합니다.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)프로젝트를 실행합니다. "물약"이라는 첫 번째 값이 제거되었는지 확인하십시오.
배열에서 값 검색
배열에서 특정 값을 찾으려면, 플레이어의 이름과 같은 배열의 값을 찾으려면 함수 table.find()를 사용하십시오. 또는 루프 및 for 문을 사용하여 자신의 검색 함수를 코드할 수 있습니다.
단일 값 찾기 및 반환
배열에서 값을 찾으려면 배열을 통과하는 함수를 만들고 첫 번째 일치하는 값을 찾을 때 중지합니다. findValue() 이라는 이름의 함수를 만듭니다.
값을 찾으면 함수는 return 키워드를 사용하여 해당 값의 인덱스를 반환합니다. 인덱스를 사용하면 배열에서 그것을 제거할 수 있습니다.
아래에 playerItems라는 이름의 배열을 복사합니다.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}두 매개 변수로 찾아야 하는 새 함수를 findValue() 라는 이름으로 코드합니다.
whichArray - 검색할 배열.
itemName - 검사할 특정 문자열.
local function findValue(whichArray, itemName)end
In findValue() , use a for loop to check if any value in the array matches itemName . If the value matches, use the keyword return to return the value found in 1> currentIndex1> .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendvalueFound라는 변수를 만들고 findValue()를 호출하여 검색 기능을 테스트하십시오. 배열에 패스하여 검색하고 검색해야 하는 값을 검색하십시오. Run 코드를 실행하여 예상 출력이 인덱스 2인지 확인하십시오.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--현재 인덱스의 값을 반환합니다.return currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
값 제거
검색 함수를 사용하여 값이 발견된 경우 해당 값을 제거할 수 있습니다. if 문으로 값이 발견되었는지 확인하십시오.
값이 valueFound 안에 있는지 확인하십시오; 그렇다면 table.remove() 를 사용하여 값을 제거합니다.
if valueFound thentable.remove(playerItems, valueFound)end아래 코드를 사용하여 배열을 인쇄하십시오.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end먼저 첫 번째 "Bread". 다른 값을 제거하려면 findValue()를 변경하십시오.
이 함수가 한 번만 호출되었기 때문에 "Bread" 제거됩니다. 다음 섹션에서는 모든 인스턴스를 찾고 제거하는 방법을 설명합니다.
특정 값 찾기 및 제거
이전 코드는 찾은 첫 번째 인스턴스만 제거할 수 있지만, 이 코드 스냅은 배열에서 모든 발생
최소 4개의 값과 세트의 <a href="/reference/engine/databases">duplicates</a> 를 가진 배열 playerItems 을 사용합니다.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}배열을 통과하려면 playerItems 에서 시작하여 배열을 통과하는 루프를 만듭니다. 배열을 통과하여 1을 증가하고 종료하고 배열을 증가하고 1을 더하십시오.
for index = #playerItems, 1, -1 doend루프에서 if 문을 사용하여 값 내 playerItems[index] 이 "Bread" 와 같은지 확인하고, 그렇지 않으면 아이템을 제거합니다.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endend배열을 인쇄하는 두 번째 루프를 위해 아래 코드를 사용하십시오.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end스크립트를 실행하고 "빵"이라는 이름의 모든 값이 제거되었는지 확인하십시오.
요약
값을 배열에 제거하거나 추가할 수 있지만 인덱싱이 변경되면 주의하십시오. 루프를 사용하여 테이블을 반복하여 모든 값의 인스턴스를 제거하거나 첫 번째 값을 찾은 경우만 제거하십시오.
키워드 return 는 루프를 중지하고 필요할 때 정보를 다시 보낼 수 있습니다.
스크립트의 완성된 버전은 아래에서 참조할 수 있습니다.
다음 프로젝트에는 이 튜토리얼에 있는 모든 스크립트가 포함되어 있습니다. 다운로드 여기 .
모든 스크립트는 ServerScriptService 및 비활성화 에 있습니다. 스크립트를 사용하려면 속성에서 비활성화를 해제하고 Studio를 실행하십시오.