Haciendo cambios en las matrices

*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 una matriz/listaa menudo tendrá que ser cambiado, como cuando se necesita eliminar un elemento del inventario de un jugador. Lua tiene funciones pre-construidas para usar con tablas para facilitar esto.

Este artículo describirá las funciones pre-construidas para tablas como agregar y quitar mientras describe cómo buscar un valor.

Para aplicar estas habilidades, crearás un guión que te ayudará a administrar el inventario de un jugador en un juego.

Añadiendo Valores a 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 entero, como Player o IntValue.

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

  1. Crea una matriz vacía llamada playerItems.


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

Eliminando valores de matrices

Para eliminar un valor, como si un jugador usó un artículo o alguien en una lista de jugadores activos deja una experiencia, use 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 ítem del inventario de un jugador o elegir el primer jugador de una lista. Para eliminar el último valor de un matriz/lista, usa table.remove(arrayName). En este caso de uso, el único parámetro necesario es la tabla misma.

  1. Use el conjunto 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. Ejecute el proyecto. En la ventana de salida, el último valor, "Sleeping Bag" , no debe imprimirse.

Eliminando por índice

Para eliminar un valor en un punto específico de la matriz/lista, ingrese en el segundo parámetro el índice que desea 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 que desea 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, "Poción" se ha eliminado.

Buscando Valores en un Arsenal

Para encontrar valores específicos en las matrices, como el nombre de un jugador ganador, use la función table.find(). Alternativamente, puede codificar su propia función de búsqueda usando for y if.

Encontrando y devolviendo un solo valor

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

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 la matriz llamada playerItems a continuación.


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

    • whichArray - la matriz para buscar.

    • itemName - la cadena específica para verificar.


      local function findValue(whichArray, itemName)
      end
  3. En findValue(), use un bucle de for para verificar si algún valor en la matriz coincide con itemName. Si el valor coincide, use 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. Pruebe la función de búsqueda creando una variable llamada valueFound y llamando findValue() . Pase en la matriz para buscar y qué valor debe buscar. Ejecuta 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 sentencia if.

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


    if valueFound then
    table.remove(playerItems, valueFound)
    end
  2. Imprime el conjunto usando el código de abajo.


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  3. Reproduce la prueba y comprueba que el primer "Bread" valor se ha eliminado de la matriz. Intenta eliminar otros valores cambiando el segundo parámetro en findValue().

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

Encontrar y eliminar todos los valores específicos

Si bien el código anterior solo pudo 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, por ejemplo, un jugador quería vender todo su pan en una tienda del 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 pasar por la matriz/lista, crea un bucle de for que vaya hacia atrás a través de playerItems, comenzando en #playerItems, terminando en 1 e incrementando en -1.


    for index = #playerItems, 1, -1 do
    end
  3. En el bucle, use una sentencia 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 de abajo para añadir un segundo al bucle que imprime el matriz/lista.


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

Resumen

Los valores se pueden eliminar o agregar a un matriz/lista, pero ten cuidado con los índices que cambian 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.

Se puede hacer referencia a una versión terminada del guión a continuación.

El siguiente proyecto incluye todos los scripts de este tutorial. Descarga aquí .

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