O conteúdo de uma matriz / listamuitas vezes terá que ser alterado, como quando precisa remover um item do inventário de um jogador. Lua tem funções pré-construídas para uso com tabelas para facilitar isso.
Este artigo descreverá funções pré-construídas para tabelas, como adicionar e remover, ao mesmo tempo em que descreve como pesquisar 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 Matrizes
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, um número ou um Objetointeiro, como Player ou IntValue.
Para praticar, você criará um script que armazena os itens do jogador em uma tabela e, em seguida, adicionará a ele. Como este exemplo é apenas um script, ele pode ser usado com qualquer arquivo ou projeto. O teste do código será feito usando a janela de saída.
Crie uma matriz vazia chamada playerItems.
playerItems = {}Adicione itens de inventário à matriz digitando table.insert(). No parênteses, digite playerItems , a tabela a ser adicionada, seguida de 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)Corra o projeto. Na saída, expanda os três pontos ... para ver a tabela impressa.
Removendo Valores de Arrays
Para remover um valor, como se um jogador tivesse usado um item ou alguém em uma lista de jogadores ativos saísse 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.
Remover o último valor
Às vezes, um script precisa remover um item específico. Por instância, removendo o primeiro item no inventário de um jogador ou escolhendo o primeiro jogador em uma lista. Para remover o último valor em uma matriz / lista, use table.remove(arrayName). Neste caso de uso, o único parâmetro necessário é a própria tabela.
Use a matriz 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 )Inicie o projeto. Na janela de saída, o último valor, "Sleeping Bag" , não deve ser impresso.
Remoção por Índice
Para remover um valor em um ponto específico da matriz / lista, insira no segundo parâmetro o índice a ser removido, 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 ser remover.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Corra o projeto. Verifique se o primeiro valor, "Poção," foi removido.
Pesquisando por Valores em uma Matriz
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 uma matriz / lista, crie uma função chamada findValue() que passe por uma matriz e pare na primeira vez que encontrar um valor correspondente.
Depois de encontrar 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 a matriz chamada playerItems abaixo.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Crie uma nova função chamada findValue () com dois parâmetros:
whichArray - a matriz para pesquisar.
itemName - a string específica para verificar.
local function findValue(whichArray, itemName)end
Em findValue(), use um loop de 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 na matriz para pesquisar e qual valor deve ser pesquisado. Corra 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--Manda de voltaro valor do Índice atualreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Removendo 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, removero valor usando table.remove().
if valueFound thentable.remove(playerItems, valueFound)endImprima a matriz usando o código abaixo.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endReproduza e verifique se o primeiro "Bread" valor 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 próxima seção abordará como encontrar e remover todas as instâncias.
Encontrando e removendo todos os valores específicos
Embora o código anterior só pudesse remover a primeira instância de um valor encontrado, este snippet de código encontrará e removerá todas as ocorrências de uma matriz / lista. Por exemplo, se, por exemplo, um jogador quisesse vender todo o seu pão em uma loja do jogo.
Use uma matriz chamada playerItems com pelo menos quatro valores e um conjunto de duplicatas .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Para passar pela matriz / lista, crie um loop de for que vai para trás até playerItems, começando em #playerItems, terminando em 1 e aumentando em -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 sim, 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 o loop que imprime o matriz / lista.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endInicie o script e verifique se todos os valores chamados "Bread" são removidos.
Resumo
Valores podem ser removidos ou adicionados a um matriz / lista, mas tenha cuidado com a mudança de índices. Use loops para iterar através de uma tabela para remover todas as instâncias de um valor, ou apenas a primeira instância encontrada.
A palavra-chave retornar pode ser usada para parar um loop e enviar informações de volta onde necessário.
Uma versão finalizada do script pode ser referenciada abaixo.
O seguinte projeto inclui todos os scripts deste Tutorial. Baixe aqui .
Observe que todos os scripts estão em ServerScriptService e desativados . Para usar um script, em suas propriedades, desmarque o campo Desativado e inicie o Studio.