배열의 내용은 종종 변경해야 합니다. 예를 들어, 플레이어의 인벤토리에서 항목을 제거해야 할 때가 그렇습니다. Luau에는 이를 쉽게 하기 위해 테이블과 함께 사용할 내장 함수가 있습니다.
이 문서에서는 값 검색 방법을 설명하면서 추가 및 제거와 같은 테이블의 사전 구축 함수에 대해 설명합니다.
이 기술을 적용하기 위해, 플레이어의 인벤토리를 관리하는 스크립트를 생성할 것입니다.

배열에 값 추가하기
배열에 새 값을 추가하려면 table.insert(array, valueToInsert)를 사용합니다. 두 번째 매개변수는 문자열, 숫자 또는 Player나 IntValue와 같은 전체 객체와 같은 모든 값일 수 있습니다.
연습을 위해, 플레이어 항목을 테이블에 저장하는 스크립트를 만들고, 그에 추가할 것입니다. 이 예제는 스크립트일 뿐이므로 모든 파일이나 프로젝트에서 사용할 수 있습니다. 코드는 출력 창을 사용하여 테스트할 것입니다.
playerItems라는 이름의 빈 배열을 만듭니다.
playerItems = {}table.insert()를 입력하여 배열에 인벤토리 항목을 추가합니다. 괄호 안에 playerItems, 추가할 테이블, 그리고 각 항목에 대한 문자열을 입력하세요. 최소 세 가지 값을 추가합니다.
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)프로젝트를 실행합니다. 첫 번째 값인 "Potion"이 제거되었는지 확인합니다.
배열에서 값 검색하기
우승 플레이어의 이름과 같이 배열에서 특정 값을 찾으려면 table.find() 함수를 사용합니다. 또는 for 루프와 if 문을 사용하여 자체 검색 함수를 작성할 수 있습니다.
단일 값 찾고 반환하기
배열에서 값을 찾으려면, 배열을 반복하고 첫 번째로 일치하는 값을 찾으면 멈추는 findValue()라는 이름의 함수를 생성합니다.
값을 찾으면, 함수는 return 키워드를 사용하여 해당 값의 인덱스를 반환합니다. 인덱스를 사용하면 배열에서 해당 값을 제거할 수 있습니다.
아래의 playerItems 배열을 복사합니다.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}두 개의 매개변수를 가진 findValue()라는 새로운 함수를 코딩합니다:
whichArray - 검색할 배열.
itemName - 체크할 특정 문자열.
local function findValue(whichArray, itemName)end
findValue()에서 for 루프를 사용하여 배열의 어떤 값이 itemName과 일치하는지 확인합니다. 값이 일치하면 return 키워드를 사용하여 currentIndex에서 찾은 값을 반환합니다.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendend변수를 생성하여 검색 기능을 테스트하고 findValue()를 호출합니다. 검색할 배열과 어떤 값을 검색해야 하는지 전달합니다. 실행 버튼을 눌러 예상 출력이 인덱스 2인지 확인합니다.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then-- currentIndex의 값을 반환합니다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개의 값과 복제본 세트를 가진 playerItems라는 배열을 사용합니다.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}배열을 탐색하려면 #playerItems에서 시작하여 1에서 종료하고 -1로 증가하는 역방향의 for 루프를 만듭니다.
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 루프를 추가합니다.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end스크립트를 실행하고 "Bread"라는 모든 값이 제거되었는지 확인합니다.
요약
값은 배열에 추가하거나 제거할 수 있지만, 이로 인해 인덱스가 밀리지 않도록 주의해야 합니다. 루프를 사용하여 테이블을 반복하여 특정 값의 모든 인스턴스를 제거하거나 발견된 첫 번째 인스턴스만 제거할 수 있습니다.
return 키워드는 루프를 멈추고 필요한 정보를 다시 보낼 수 있습니다.
완성된 스크립트의 버전은 아래에서 참조할 수 있습니다.
다음 프로젝트는 이 튜토리얼의 모든 스크립트를 포함합니다. 여기서 다운로드.
모든 스크립트는 ServerScriptService에 있으며 비활성화되어 있습니다. 스크립트를 사용하려면 속성에서 비활성화 필드를 체크 해제하고 스튜디오를 실행하세요.