Os conteúdos de um matriz / listageralmente precisarão ser alterados, como quando precisando remover um item do inventário de um jogador. O Lua tem funções pré-construídas para uso com tabelas para facilitar isso.
Este artigo abordará funções pré-construídas para tabelas como adicionar e remover, bem como descrever como procurar por um valor.
Para aplicar essas habilidades, você criará um script que ajuda a gerenciar o inventário de um jogador em um jogo.
Adicionando 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 Objetointeiro, como Player ou IntValue .
Para praticar, você criará um script que armazenará itens do jogador em uma tabela e, em seguida, adicionará. 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 à matriz ao digitar 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.
Removendo Valores dos Arrays
Para remover um valor, como se um jogador usou um item ou alguém em uma lista de jogadores ativos sai de 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.
Removendo 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 tabela em si.
Use o array de itens do exemplo anterior. Então, para remover o último valor da tabela, neste caso "Sleeping Bag", tipo 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 Saída, o último valor, "Sleeping Bag", não deve ser impresso.
Removendo por Índice
Para remover um valor em um ponto específico na matriz / lista, insira o segundo parâmetro o índice para remover, como table.remove(arrayName, 1).
Usando a mesma tabela, digite table.remove(). No parâmetro, insira o nome da tabela e 1, o valor para remover.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Executar o projeto. Verifique se o primeiro valor, "Poção" foi removido.
Procurando por Valores em um Arrays
Para encontrar valores específicos em matrizes, 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.
Encontrando e Retornando um Único Valor
Para encontrar um valor em um matriz / lista, crie uma função chamada findValue() que passa por um array e para parar a primeira vez que encontra um valor correspondente.
Uma vez que encontrar o valor, a função usará o return keyword para retornar o índice desse valor. Com um índice, você pode removê-lo do matriz / lista.
Copie o array chamado playerItems abaixo.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Código uma nova função chamada findValue() com dois parâmetros:
whichArray - o array para procurar.
itemName - a string específica para verificar.
local function findValue(whichArray, itemName)end
Em findValue(), use um for loop para verificar se qualquer valor na matriz corresponde a itemName . Se o valor correspondder, use a palavra-chave return para retornar o valor encontrado em 1> currentIndex1> .
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 procurar. Run 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 do índice atual de voltarreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Removendo um Valor
Se um valor for encontrado usando a função de pesquisa, ele pode ser removido. Verifique se um valor for encontrado com uma declaração if.
Verifique se um valor está dentro de valueFound ; se sim, remova o valor usando table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endImpressione 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 do 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 abaixo cobrirá como encontrar e remover todas as instâncias.
Encontrando e Removendo Todo um Valor Específico
Enquanto o código anterior só poderia remover a primeira instância de um valor encontrado, este código de exemplo encontrará e removerá todas as ocorrências de um matriz / lista. Por exemplo, se, digamos, um jogador quisesse 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 passar pelo matriz / lista, crie um for loop que vai para trás através de playerItems, começando em #playerItems e terminando em 1, e incrementando por -1.
for index = #playerItems, 1, -1 doendNa fita, use uma declaração if para verificar se o valor dentro de playerItems[index] é igual a "Bread" e, se sim, remover 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.
Visão Geral
Os valores podem ser removidos ou adicionados a um matriz / lista, mas tenha cuidado com os índices mudando fazendo isso. Use loops para iterações através de uma tabela para remover todos os instâncias de um valor, ou apenas a primeira instância encontrada.
A palavra-chave return pode ser usada para parar um loop e enviar informações de volta onde necessário.
Uma versão final do script pode ser referenciado abaixo.
O seguinte projeto inclui todos os scripts neste Tutorial. Baixe aqui .
Observe que todos os scripts estão em ServerScriptService e desativado . Para usar um script, em suas propriedades, desmarque o campo Desativado eExecute Studio.