Treści wierszy będą często musiały być zmieniane, jak kiedy trzeba usunąć pozycję z wyposażeniegracza. Lua ma wbudowane funkcje do użycia z tabelami, aby ułatwić to.
Ten artykuł przedstawi funkcje zapisu wcześniej zbudowane dla tabeli takich jak dodaj i usuń, opisując, jak szukać wartości.
Aby zastosować te umiejętności, stworzysz skrypt, który pomaga zarządzać ekwipunkiem gracza w grze.
Dodawanie wartości do matryc
Aby dodać nową wartość do matryki, użyj table.insert(array, valueToInsert) . Drugi parametr może być dowolną wartością, taką jak ciąg, liczby lub całe obiekty, takie jak Player lub IntValue .
Aby praktykować, stworzysz skrypt, który przechowuje przedmioty gracza w tabeli, a następnie je dodaje. Ponieważ ten przykład jest tylko skryptem, można go używać z dowolnym plikiem lub projektem. Testowanie kodu będzie wykonane używając okiena wyjścia.
Utwórz pustą listę nazwany playerItems .
playerItems = {}Dodaj przedmioty do zapasu poprzez wpisanie table.insert() . W nawiasach wpisz playerItems, tabelę do dodania, następnie przez strumień dla każdego przedmiotu. Wpisz co najmniej trzy wartości.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Zacznij projekt. WOutput, rozwinięte trzy kropki ... , aby zobaczyć wydrukowany tabelę.
Usuwanie wartości z matryc
Aby usunąć wartość, jak jeśli gracz użył przedmiotu lub kogoś na liście aktywnych 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 na określonym indeksie.
Usuwanie ostatniej wartości
Czasami skrypt musi usunąć określony przedmiot. Na instancjausuwając pierwszy element w wyposażeniegracza lub wybierając pierwszego gracza na liście. Aby usunąć ostatnią wartość w matrycy, użyj table.remove(arrayName) . W tym przypadku jedynym parametrem jest tabela sama w sobie.
Użyj maszyny czasowej 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)Zakończ projekt. W oknie Wyjścia ostatni wartość, "Sleeping Bag", nie powinien się wydrukować.
Usuwanie przez indeks
Aby usunąć wartość w określonym punkcie w matrycy, wpisz drugi parametr wartości do usuwać, wyjmować, takich jak table.remove(arrayName, 1).
Używając tej samej tabeli, wpisz table.remove() . W parametrach wpisz nazwę tabeli i 1 , wartość do usuwać, wyjmować.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Zaaktywuj projekt. Sprawdź, że pierwsza wartość, "Potion", została usunięta.
Poszukiwanie wartości w matrycy
Aby znaleźć określone wartości w matrycach, takich jak imię gracz, użyj funkcji table.find(). Alternatywnie możesz zaimplementować własną funkcję wyszukiwania używając for pętli i if stwierdzeń.
Poszukiwanie i Zwrot Jedynego Wartości
Aby znaleźć wartość w matrycy, utwórz funkcję nazwaną findValue(), która przechodzi przez matrycę i zatrzymuje pierwszy raz, gdy znajduje pasującą wartość.
Gdy znajdzie wartość, funkcja użyje słowa kluczowego return, aby zwrócić indeks tego wartości. Z indeksem możesz go usunąć z matryki.
Kopiuj wiersz nazyający się playerItems poniżej.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Zapisz nową funkcję o nazwie findValue() z dwoma parami:
whichArray - lista do wyszukiwania.
itemName - określony ciąg znaków do sprawdzenia.
local function findValue(whichArray, itemName)end
W findValue() użyj for pętli, aby sprawdzić, czy jakakolwiek wartość w matrycy pasuje itemName . Jeśli wartość pasuje, użyj słowa kluczowego return, aby zwrócić znalezioną w 1> currentIndex1> wartość.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendTestuj funkcję wyszukiwania poprzez utworzenie zmiennej nazyjącej się valueFound i wezwanie findValue(). Przekaż w pasku archeologii, aby wyszukiwaćwynikło wynikiem indeksu 2 .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Wyświetla wartość obecnego indeksureturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Usunięcie wartości
Jeśli znaleziono wartość używając funkcji znalezienia, można ją usunąć. Sprawdź, czy znaleziono wartość z użyciem if.
Sprawdź, czy wartość jest w valueFound ; jeśli tak, usuń wartość używając table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endWyślij maszynę drukującą maszynę drukującą poniżej.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endZalicz test i sprawdź, czy pierwsza wartość "Bread" została usunięta z wartości. Spróbuj usunąć inne wartości, zmieniając drugą parametr w findValue() .
Uwaga, że ponieważ ta funkcja została wezwana tylko raz, tylko pierwsza instancja "Bread" została usunięta. Następny rozdział będzie dotyczył sposobu znalezienia i usuwania wszystkich instancji.
Find and Removing All of a Specified Value
Podczas gdy poprzedni kod tylko usuwa pierwszy instans znalezionego wartości, ten kod snippet znajdzie i usunie wszystkie pojawienia się z matryki. Na przykład, jeśli gracz chciałby sprzedać wszystkie swoje chleby w grze.
Użyj wielokolorowego wskaźnika playerItems z co najmniej czterema wartościami i zestawem duplikatów .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Aby przejść przez matrycę, utwórz pętło, które idzie do tyłu poprzez playerItems , zaczynając od #playerItems i kończąc na 1, a zwiększając o -1.
for index = #playerItems, 1, -1 doendW pętli użyj playerItems[index] aby sprawdzić, czy wartość w playerItems[index] jest równa "Bread" i jeśli tak, usuń przedmiot.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendUżyj kodu poniżej, aby dodać drugi dla pętli, która drukuje maszynę.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endZ実行脚本 i sprawdź, że wszystkie wartości o nazwie "Bread" zostały usunięte.
Podsumowanie
Wartości można usunąć lub dodać do matryki, ale uważaj na przesunięcia wskaźników, które to zrobią. Użyj pętli, aby przejść przez tabelę, aby usunąć wszystkie instancje wartości lub po prostu pierwszy znaleziony przykład.
Słowo kluczowe return może być używane do zatrzymania pętli i wysyłania informacji, gdy to konieczne.
Ukończona wersja skryptu może być odniesiona poniżej.
Poniższy projekt zawiera wszystkie skrypcity w tym tutorialu. Załaduj tutaj .
Uwaga wszystkie skrypty są w ServerScriptService i wyłączone. Aby użyć skryptu, w jego właściwościach odznacz pola Wyłączone i uruchom Studio.