Haciendo cambios en los matices

*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 se cambiará, como cuando se necesita eliminar un artículo del inventario de un jugador. Lua tiene funciones preconstruidas para su uso con tablas para hacer esto más fácil.

Este artículo proporcionará funciones predeterminadas para tablas como agregar y eliminar mientras se explica cómo buscar un valor.

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

Añadir valores a los arreglos

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 entero, como Player o IntValue .

Para practicar, crearás un script que almacena los elementos del jugador en una tabla, luego los agregarás. Dado que este ejemplo es solo un script, se puede usar con cualquier archivo o proyecto. La prueba del código se hará usando la ventana de salida.

  1. Crea un arreglo vacío llamado playerItems .


    playerItems = {}
  2. Añade artículos de inventario a la matriz escribiendo table.insert() . En la parentesis, escribe 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. Ejecutar el proyecto. En Salida, expanda los tres puntos ... para ver la tabla impresa.

Eliminando valores de matrizes

Para eliminar un valor, como si un jugador usó un artículo o alguien en una lista de jugadores activos se fue de una experiencia, usa 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.

Eliminando 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 el primer jugador en una lista. Para eliminar el último valor en un matriz/lista, use table.remove(arrayName) . En este caso de uso, el único parámetro necesario es la propia tabla.

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


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

Eliminando por índice

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

  1. Usa la misma tabla, escribe table.remove() . En los parámetros, introduce 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. Ejecutar el proyecto. Compruebe que el primer valor, "Potion", se eliminó.

Buscando valores en un matriz

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

Buscar y devolver un valor único

Para encontrar un valor en un matriz/lista, create a function named findValue() que pasa por un array y detiene la primera vez que encuentra un valor que coincida.

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

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


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

    • whichArray - el rango para buscar.

    • itemName - la cadena específica para verificar.


      local function findValue(whichArray, itemName)
      end
  3. En findValue() , usa un for para comprobar si cualquier valor en el arreglo coincide con itemName . Si el valor coincide, usa la palabra clave return para devolver el valor encontrado en 1> currentIndex1> .


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    return currentIndex
    end
    end
    end
  4. Pruebe la función de búsqueda creando una variable llamada valueFound y llamando findValue() . Pasar en el array para buscar, y qué valor debería buscar. Ejecutar el código para confirmar que el resultado esperado 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)

Eliminando un Valor

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

  1. Compruebe si un valor está dentro de valueFound ; si lo estás, elimina 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. Pruebe y verifique que el primer valor de "Bread" del matriz/listade arreglo se eliminó del arreglo. Intenta eliminar otros valores cambiando el segundo parámetro en findValue() .

    Nota que porque 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.

Buscar y eliminar todos los valores específicos

Aunque 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 quiso vender todo su pan en una tienda en el juego.

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


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


    for index = #playerItems, 1, -1 do
    end
  3. En el bucle, usa una declaración if para ver si el valor dentro de playerItems[index] es igual a "Bread" , y si es así, elimina 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 para imprimir el matriz/lista.


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

Resumen

Las valores se pueden eliminar o agregar a un matriz/lista, pero tenga cuidado con los índices que cambian haciendo esto. Use ciclos para repetir 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 regreso donde sea necesario.

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

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

Nota: todos los scripts están en ServerScriptService y desactivado . Para usar un script, en sus propiedades, desmarque el campo Desactivado y ejecute Studio.