O conteúdo de um matriz / listamuitas vezes precisará ser alterado, como quando for necessário remover um item do inventário de um jogador.O Luau tem funções integradas para uso com tabelas para tornar isso mais fácil.
Este artigo abordará funções pré-construídas para tabelas como adicionar e remover, enquanto descreve como pesquisar por um valor.
Para aplicar essas habilidades, você criará um script que ajuda a gerenciar o inventário de um jogador em um jogo.

Adicionar valores a arrays
Para adicionar um novo valor a um matriz / lista, use table.insert(array, valueToInsert) .O segundo parâmetro pode ser qualquer valor, como uma string / cadeia / texto, número ou um Objetointeiro, como Player ou IntValue.
Para praticar, você criará um script que armazena itens do jogador em uma tabela, então adicionará a ele.Como este exemplo é apenas um script, ele pode ser usado com qualquer arquivo ou projeto.Testar o código será feito usando a janela de Saída.
Crie um array vazio chamado playerItems .
playerItems = {}Adicione itens de inventário ao array digitando table.insert().Na parentese, digite playerItems , a tabela para adicionar, seguida por uma string para cada item.Insira pelo menos três valores.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Execute o projeto. Em Saída, expanda os três pontos ... para ver a tabela impressa.
Remover valores de arrays
Para remover um valor, como se um jogador usasse um item ou alguém em uma lista de jogadores ativos deixasse uma experiência, use table.remove() .Dependendo dos parâmetros fornecidos, a função pode remover o último valor de uma tabela ou em um índice específico.
Remova o último valor
Às vezes, um script precisa remover um item específico.Por instância, remover o primeiro item no inventário de um jogador ou escolher o primeiro jogador em uma lista.Para remover o último valor em um matriz / lista, use table.remove(arrayName) .Neste caso de uso, o único parâmetro necessário é a própria tabela.
Use o conjunto de itens do exemplo anterior. Então, para remover o último valor da tabela, neste caso "Sleeping Bag", digite table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)Execute o projeto. Na janela de Saída, o último valor, "Sleeping Bag", não deve imprimir.
Remover pelo índice
Para remover um valor em um ponto específico do matriz / lista, insira no segundo parâmetro o índice a remover, como table.remove(arrayName, 1).
Usando a mesma tabela, digite table.remove() . Nos parâmetros, insira o nome da tabela e 1 , o valor a remover.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Execute o projeto. Verifique se o primeiro valor, "Poção" foi removido.
Procurar por valores em um matriz / lista
Para encontrar valores específicos em arrays, como o nome de um jogador vencedor, use a função table.find().Alternativamente, você pode codificar sua própria função de pesquisa usando for loops e if declarações.
Encontre e retorne um único valor
Para encontrar um valor em um matriz / lista, crie uma função chamada findValue() que percorre um array e para a primeira vez que encontrar um valor correspondente.
Uma vez que encontra o valor, a função usará a palavra-chave return para retornar o índice desse valor. Com um índice, você pode removê-lo da matriz / lista.
Copie o array chamado playerItems abaixo.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Codifique uma nova função chamada findValue() com dois parâmetros:
whichArray - o array para pesquisar.
itemName - a string específica para verificar.
local function findValue(whichArray, itemName)end
Em findValue(), use um ciclo for para verificar se algum valor no array corresponde a itemName.Se o valor corresponder, use a palavra-chave return para retornar o valor encontrado em currentIndex .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendTeste a função de pesquisa criando uma variável chamada valueFound e chamando findValue().Passe no array para pesquisar e que valor deve pesquisar. Executar o código para confirmar que a saída esperada é o índice 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Envia o valor de currentIndex de voltarreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Remova um valor
Se um valor foi encontrado usando a função find, ele pode ser removido. Verifique se um valor foi encontrado com uma declaração if.
Verifique se um valor está dentro de valueFound ; se assim for, remova o valor usando table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endImprima o array usando o código abaixo.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endTeste e verifique se o primeiro valor "Bread" foi removido da matriz / lista.Tente remover outros valores alterando o segundo parâmetro em findValue() .
Observe que, porque essa função foi chamada uma vez, apenas a primeira instância de "Bread" foi removida.A seção a seguir abordará como encontrar e remover todas as instâncias.
Encontre e remova todo um valor específico
Enquanto o código anterior só poderia remover a primeira instância de um valor encontrado, este trecho de código encontrará e removerá todas as ocorrências de um matriz / lista.Por exemplo, se, digamos, um jogador quiser vender todo o seu pão em uma loja no jogo.
Use um array chamado playerItems com pelo menos quatro valores e um conjunto de duplicados .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Para percorrer o matriz / lista, crie um ciclo for que vá para trás através de playerItems, começando em #playerItems, terminando em 1 e incrementando por -1.
for index = #playerItems, 1, -1 doendNo loop, use uma declaração if para verificar se o valor dentro de playerItems[index] é igual a "Bread" e, se assim for, remova o item.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendUse o código abaixo para adicionar um segundo para loop que imprime o matriz / lista.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endExecute o script e verifique se todos os valores chamados "Pão" são removidos.
Sumário
Os valores podem ser removidos ou adicionados a um matriz / lista, mas tenha cuidado com os índices que se movem fazendo isso.Use loops para iterar por uma tabela para remover todas as instâncias de um valor, ou apenas a primeira instância encontrada.
A palavra-chave return pode ser usada para interromper um loop e enviar informações de volta onde for necessário.
Uma versão final do script pode ser referenciada abaixo.
O seguinte projeto inclui todos os scripts neste Tutorial. Baixe aqui.
Observe que todos os scripts estão em Serviço de Script de Servidor e desativado .Para usar um script, em suas propriedades, desmarque o campo Desativado e execute o Studio.