Hacer cambios en los arrays

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

El contenido de un matriz/listaa menudo tendrá que cambiarse, como cuando se necesita eliminar un artículo del inventario de un jugador.Luau tiene funciones integradas para usar con tablas para hacer esto más fácil.

Este artículo describirá las funciones precargadas para tablas como agregar y eliminar mientras describe cómo buscar un valor.

Para aplicar estas habilidades, crearás un script que ayude a administrar el inventario de un jugador en un juego.

Añadir valores a los arrays

Para agregar un nuevo valor a un matriz/lista, use table.insert(array, valueToInsert) .El segundo parámetro puede ser cualquier valor como una cadena, un número o un objeto completo, como Player o IntValue .

Para practicar, crearás un script que almacene artículos del jugador en una tabla, luego agregarás más a él.Dado que este ejemplo es solo un script, se puede utilizar con cualquier archivo o proyecto.La prueba del código se hará usando la ventana de salida.

  1. Crea un array vacío llamado playerItems .


    playerItems = {}
  2. Añade artículos de inventario al array escribiendo table.insert() .En la parentesis, escriba playerItems , la tabla para agregar, seguida de una cadena para cada objeto.Inserta al menos tres valores.


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    print(playerItems)
  3. Ejecuta el proyecto. En Salida, expande los tres puntos ... para ver la tabla impresa.

Eliminar valores de los arrays

Para eliminar un valor, como si un jugador usó un artículo o alguien en una lista de jugadores activos deja una experiencia, utilice table.remove() .Dependiendo de los parámetros proporcionados, la función puede eliminar el último valor de una tabla o en un índice específico.

Eliminar el último valor

A veces, un script necesita eliminar un objetoespecífico.Por instancia, eliminar el primer artículo en el inventario de un jugador o elegir al primer jugador en una lista.Para eliminar el último valor en un matriz/lista, utilice table.remove(arrayName) .En este caso de uso, el único parámetro necesario es la propia tabla.

  1. Use el array de elementos del ejemplo anterior. Luego, para eliminar el último valor de la tabla, en este caso "Sleeping Bag" , escriba table.remove(playerItems)


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems)
    print(playerItems)
  2. Ejecuta el proyecto. En la ventana de salida, el último valor, "Sleeping Bag" , no debería imprimirse.

Eliminar por índice

Para eliminar un valor en un punto específico del matriz/lista, ingrese en el segundo parámetro el índice para eliminar, como table.remove(arrayName, 1) .

  1. Usando la misma tabla, escriba table.remove() . En los parámetros, ingrese el nombre de la tabla y 1 , el valor para eliminar.


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems, 1)
  2. Ejecuta el proyecto. Asegúrate de que el primer valor, "Poción" se eliminó.

Buscar valores en un matriz/lista

Para encontrar valores específicos en arrays, como el nombre de un jugador ganador, utilice la función table.find().Alternativamente, puedes codificar tu propia función de búsqueda usando for bucles y if declaraciones.

Encuentra y devuelve un solo valor

Para encontrar un valor en un matriz/lista, crea una función llamada findValue() que recorre un array y se detiene la primera vez que encuentra un valor coincidente.

Una vez que encuentre el valor, la función usará la palabra clave return para devolver el índice de ese valor. Con un índice, puedes eliminarlo del matriz/lista.

  1. Copia el array llamado playerItems a continuación.


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. Codifica una nueva función llamada findValue() con dos parámetros:

    • whichArray - el array para buscar a través de.

    • itemName - la cadena específica para comprobar.


      local function findValue(whichArray, itemName)
      end
  3. En findValue() , use un bucle for para verificar si algún valor en el array coincide con itemName .Si el valor coincide, utilice la palabra clave return para devolver el valor encontrado en currentIndex .


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    return currentIndex
    end
    end
    end
  4. Prueba la función de búsqueda creando una variable llamada valueFound y llamando findValue().Pasa el array para buscar y qué valor debe buscar. Ejecutar el código para confirmar que la salida esperada es el índice 2.


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    --Envía el valor de currentIndex de volver
    return currentIndex
    end
    end
    end
    local valueFound = findValue(playerItems, "Bread")
    print("The value is at index " .. valueFound)

Eliminar un valor

Si se encontró un valor usando la función find, se puede eliminar. Compruebe si se encontró un valor con una declaración if.

  1. Compruebe si un valor está dentro de valueFound ; si es así, elimine el valor usando table.remove() .


    if valueFound then
    table.remove(playerItems, valueFound)
    end
  2. Imprima el array usando el código a continuación.


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  3. Prueba y comprueba que el primer valor "Bread" se eliminó de la matriz/lista.Trate de eliminar otros valores cambiando el segundo parámetro en findValue() .

    Observe que debido a que esta función se llamó una vez, solo se eliminó la primera instancia de "Bread".La siguiente sección cubrirá cómo encontrar y eliminar todas las instancias.

Encuentra y elimina todo un valor específico

Si bien el código anterior solo podía eliminar la primera instancia de un valor encontrado, este fragmento de código encontrará y eliminará todas las ocurrencias de un matriz/lista.Por ejemplo, si, digamos, un jugador quisiera vender todo su pan en una tienda en el juego.

  1. Usa un array llamado playerItems con al menos cuatro valores y un conjunto de duplicados .


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. Para recorrer el matriz/lista, crea un bucle for que vaya hacia atrás a través de playerItems, comenzando en #playerItems, terminando en 1 y aumentando en -1.


    for index = #playerItems, 1, -1 do
    end
  3. En el bucle, utilice una declaración if para verificar si el valor dentro de playerItems[index] es igual a "Bread" , y si es así, elimine el objeto.


    for index = #playerItems, 1, -1 do
    if playerItems[index] == "Bread" then
    table.remove(playerItems, index)
    end
    end
  4. Usa el código a continuación para agregar un segundo bucle que imprima el matriz/lista.


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  5. Ejecute el script y verifique que todos los valores llamados "Pan" se eliminen.

Resumen

Los valores se pueden eliminar o agregar a un matriz/lista, pero tenga cuidado con los cambios de índice al hacerlo.Usa bucles para iterar a través de una tabla para eliminar todas las instancias de un valor o solo la primera instancia encontrada.

La palabra clave return se puede usar para detener un bucle y enviar información de vuelta donde sea necesario.

Una versión terminada del script se puede referenciar a continuación.

El siguiente proyecto incluye todos los scripts en este tutorial. Descargue aquí .

Tenga en cuenta que todos los scripts están en ServerScriptService y deshabilitados .Para usar un script, en sus propiedades, desmarque el campo Desactivado y ejecute Studio.