배열의 내용은 종종 변경해야 할 필요가 있습니다. 예를 들어, 플레이어의 인벤토리에서 아이템을 제거해야 할 때가 있습니다. 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 currentIndexendendendvalueFound라는 변수를 생성하고 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"의 첫 번째 인스턴스만 제거되었음을 주목하세요. 다음 섹션에서는 모든 인스턴스를 찾고 제거하는 방법을 다룰 것입니다.
특정 값의 모든 인스턴스 찾고 제거하기
이전 코드는 발견된 값의 첫 번째 인스턴스만 제거할 수 있었지만, 이 코드 조각은 배열에서 모든 발생을 찾고 제거합니다. 예를 들어, 플레이어가 게임 내 상점에서 모든 빵을 판매하고 싶어할 경우입니다.
최소한 네 개의 값과 중복 세트를 가진 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에 있으며 비활성화되어 있습니다. 스크립트를 사용하려면 속성에서 비활성화 필드를 선택 해제하고 스튜디오를 실행하세요.