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ł opisze wbudowane funkcje dla tabel, takie jak dodawanie i usuwanie, jednocześnie opisując, jak wyszukiwać wartość.
Aby zastosować te umiejętności, stworzysz skrypt, który pomoże zarządzać 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, jak Player lub IntValue.
Aby poćwiczyć, stworzysz skrypt, który przechowuje przedmioty gracza w tabeli, a następnie je dodaje. 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 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 oknie Wyjścia rozwiń trzy kropki ..., aby zobaczyć wydrukowaną tabelę.
Usuwanie wartości z tablic
Aby usunąć wartość, na przykład gdy gracz użył przedmiotu lub ktoś z listy aktywnych graczy opuścił grę, użyj table.remove(). W zależności od podanych parametrów funkcja może usunąć ostatnią wartość tabeli lub wartość na określonym indeksie.
Usuń ostatnią wartość
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 tym przypadku jedynym potrzebnym 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 Wyjścia ostatnia wartość, "Sleeping Bag", nie powinna się wydrukować.
Usuń według indeksu
Aby usunąć wartość w określonym punkcie 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 wprowadź 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, takie jak imię 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óć pojedynczą wartość
Aby znaleźć wartość w tablicy, stwórz funkcję o nazwie findValue(), która przeszukuje tablicę i zatrzymuje się za pierwszym razem, gdy znajdzie pasują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ąć ją 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 do przeszukania.
itemName - konkretny ciąg do sprawdzenia.
local function findValue(whichArray, itemName)end
W findValue(), użyj pętli for, aby sprawdzić, czy jakakolwiek wartość w tablicy pasuje do 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 oraz wartość, której należy szukać. 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ść znajduje się w valueFound; jeśli tak, usuń wartość, używając table.remove().
if valueFound thentable.remove(playerItems, valueFound)endWydrukuj tablicę, używając poniższego kodu.
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 omówi, jak znaleźć i usunąć wszystkie instancje.
Znajdź i usuń wszystkie wystąpienia 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ć cały swój chleb 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 przechodzi 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", a jeśli tak, usuń przedmiot.
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 wydrukuje tablicę.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Indeks " .. index .. ": " .. itemString)endUruchom skrypt i sprawdź, czy wszystkie wartości o nazwie "Bread" zostały usunięte.
Podsumowanie
Wartości mogą być usuwane lub dodawane do tablicy, ale należy uważać na przesunięcia indeksów podczas tego procesu. Użyj pętli, aby przejść przez tabelę, aby usunąć wszystkie instancje wartości lub tylko pierwszą znalezioną instancję.
Słowo kluczowe return może być używane do zatrzymywania pętli i przesyłania informacji tam, gdzie jest to potrzebne.
Zakończona wersja skryptu jest dostępna poniżej.
Następujący 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 Wyłączone i uruchom Studio.