Zawartość tablicy często musi być zmieniana, na przykład gdy trzeba usunąć przedmiot z ekwipunku gracza. Luau ma wbudowane funkcje do użycia z tabelami, aby to ułatwić.
Ten artykuł przedstawi wbudowane funkcje dla tabel, takie jak dodawanie i usuwanie, a także opisze, jak wyszukiwać wartość.
Aby zastosować te umiejętności, stworzysz skrypt, który pomoże w zarządzaniu ekwipunkiem gracza.

Dodawanie wartości do tablic
Aby dodać nową wartość do tablicy, użyj table.insert(array, valueToInsert). Drugi parametr może być dowolną wartością, taką jak ciąg znaków, liczba lub cały obiekt, np. Player lub IntValue.
Aby przećwiczyć to, stworzysz skrypt, który przechowuje przedmioty graczy w tabeli, a następnie je doda. Ponieważ ten przykład to tylko skrypt, może być użyty w dowolnym pliku lub projekcie. Testowanie kodu będzie odbywać się za pomocą okna Wyjścia.
Stwórz pustą tablicę o nazwie playerItems.
playerItems = {}Dodaj przedmioty do ekwipunku do tablicy, wpisując table.insert(). W nawiasach wpisz playerItems, tabelę, do której chcesz dodać, a następnie ciąg znaków dla każdego przedmiotu. Wstaw co najmniej trzy wartości.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Uruchom projekt. W Wyjściu rozszerz trzy kropki ..., aby zobaczyć wydrukowaną tabelę.
Usuwanie wartości z tablic
Aby usunąć wartość, na przykład jeśli gracz użył przedmiotu lub ktoś z aktywnej listy graczy opuścił doświadczenie, użyj table.remove(). W zależności od dostarczonych parametrów, funkcja może usunąć ostatnią wartość tabeli lub wartość o określonym indeksie.
Usuwanie ostatniej wartości
Czasami skrypt musi usunąć konkretny przedmiot. Na przykład usunięcie pierwszego przedmiotu w ekwipunku gracza lub wybranie pierwszego gracza z listy. Aby usunąć ostatnią wartość w tablicy, użyj table.remove(arrayName). W tej sytuacji jedynym wymaganym parametrem jest sama tabela.
Użyj tablicy przedmiotów z poprzedniego przykładu. Następnie, aby usunąć ostatnią wartość z tabeli, w tym przypadku "Sleeping Bag", wpisz table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")table.remove(playerItems)print(playerItems)Uruchom projekt. W oknie Wynik ostatnia wartość, "Sleeping Bag", nie powinna się wydrukować.
Usuwanie według indeksu
Aby usunąć wartość w określonym punkcie w tablicy, wprowadź w drugim parametrze indeks do usunięcia, na przykład table.remove(arrayName, 1).
Używając tej samej tabeli, wpisz table.remove(). W parametrach wpisz nazwę tabeli i 1, wartość do usunięcia.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")table.remove(playerItems, 1)Uruchom projekt. Sprawdź, czy pierwsza wartość, "Potion", została usunięta.
Wyszukiwanie wartości w tablicy
Aby znaleźć konkretne wartości w tablicach, na przykład nazwisko zwycięskiego gracza, użyj funkcji table.find(). Alternatywnie możesz napisać własną funkcję wyszukiwania, używając pętli for i instrukcji if.
Znajdź i zwróć jedną wartość
Aby znaleźć wartość w tablicy, stwórz funkcję o nazwie findValue(), która przeszukuje tablicę i zatrzymuje się, gdy pierwszy raz znajdzie odpowiadającą wartość.
Gdy znajdzie wartość, funkcja użyje słowa kluczowego return, aby zwrócić indeks tej wartości. Mając indeks, możesz usunąć go z tablicy.
Skopiuj tablicę o nazwie playerItems poniżej.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Napisz nową funkcję o nazwie findValue() z dwoma parametrami:
whichArray - tablica, w której chcesz przeprowadzić wyszukiwanie.
itemName - konkretny ciąg znaków do sprawdzenia.
local function findValue(whichArray, itemName)end
W findValue() użyj pętli for, aby sprawdzić, czy jakakolwiek wartość w tablicy odpowiada itemName. Jeśli wartość pasuje, użyj słowa kluczowego return, aby zwrócić wartość znalezioną w currentIndex.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendPrzetestuj funkcję wyszukiwania, tworząc zmienną o nazwie valueFound i wywołując findValue(). Przekaż tablicę do przeszukania i jaką wartość powinna wyszukiwać. Uruchom kod, aby potwierdzić, że oczekiwany wynik to indeks 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Zwraca wartość currentIndexreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("Wartość znajduje się na indeksie " .. valueFound)
Usuń wartość
Jeśli wartość została znaleziona za pomocą funkcji wyszukiwania, można ją usunąć. Sprawdź, czy wartość została znaleziona za pomocą instrukcji if.
Sprawdź, czy wartość jest obecna w valueFound; jeśli tak, usuń tę wartość używając table.remove().
if valueFound thentable.remove(playerItems, valueFound)endWydrukuj tablicę, używając kodu poniżej.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Indeks " .. index .. ": " .. itemString)endPrzetestuj grę i sprawdź, czy pierwszy wartość "Bread" została usunięta z tablicy. Spróbuj usunąć inne wartości, zmieniając drugi parametr w findValue().
Zauważ, że ponieważ ta funkcja została wywołana raz, tylko pierwsza instancja "Bread" została usunięta. Następna sekcja opisze, jak znaleźć i usunąć wszystkie instancje.
Znajdź i usuń wszystkie instancje konkretnej wartości
Podczas gdy poprzedni kod mógł usunąć tylko pierwszą instancję znalezionej wartości, ten fragment kodu znajdzie i usunie wszystkie wystąpienia z tablicy. Na przykład, jeśli gracz chciałby sprzedać wszystkie swoje pieczywo w sklepie w grze.
Użyj tablicy o nazwie playerItems z co najmniej czterema wartościami i zestawem duplikatów.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Aby przejść przez tablicę, stwórz pętlę for, która przebiega wstecz przez playerItems, zaczynając od #playerItems, kończąc na 1 i inkrementując o -1.
for index = #playerItems, 1, -1 doendW pętli użyj instrukcji if, aby sprawdzić, czy wartość w playerItems[index] jest równa "Bread" i jeśli tak, usuń element.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendUżyj poniższego kodu, aby dodać drugą pętlę for, która drukuje tablicę.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Indeks " .. index .. ": " .. itemString)endUruchom skrypt i sprawdź, czy wszystkie wartości nazwane "Bread" zostały usunięte.
Podsumowanie
Wartości można usuwać lub dodawać do tablicy, ale należy uważać na przesuwanie indeksów przy tym. Użyj pętli, aby przechodzić przez tabelę, aby usunąć wszystkie wystąpienia wartości lub tylko pierwszą znalezioną instancję.
Słowo kluczowe return można użyć do zatrzymania pętli i przesłania informacji tam, gdzie jest to potrzebne.
Ukończoną wersję skryptu można znaleźć poniżej.
Następny projekt zawiera wszystkie skrypty w tym samouczku. Pobierz tutaj.
Zauważ, że wszystkie skrypty znajdują się w ServerScriptService i są wyłączone. Aby użyć skryptu, w jego właściwościach odznacz pole Disabled i uruchom Studio.