Pregunta

No se puede conseguir índice de entrada de la tabla. Lo necesito para eliminar un elemento de la tabla.

Yo uso table.insert para añadir entradas a la tabla.

Otra pregunta: ¿por qué Lua no tiene "sobrecarga" a table.remove función de lo que uno puede remover el artículo por el índice asociativo

¿Fue útil?

Solución

elimina t[k]=nil de t la entrada con k clave.

Para la segunda pregunta, la respuesta es que las tablas pueden tener metatablas individuales.

Otros consejos

Tablas implementar una desordenada uno a muchos relación entre claves y valores. En otras palabras, cualquier tecla especial (índice) sólo puede aparecer una vez en la mesa, pero el valor puede aparecer varias veces.

Si conoce el k clave, entonces t[k] = nil eliminará la clave y el valor asociado de la mesa. Sin embargo, esta operación no tiene efecto en ninguna otra tecla o valores de la tabla.

Las funciones table.insert y table.remove operan sobre el conjunto de teclas de números enteros secuenciales que comienza en 1, que se utilizan por convención para implementar arrays o listas. A tal fin, manipulan otros valores en la lista con el fin de mantener la lista de los agujeros en desarrollo.

Una forma de encontrar una clave con la que se encontró algún valor es simplemente buscar en la tabla. Si esto se hará más de una vez, entonces es probablemente una buena idea para construir una segunda tabla que invierte los pares clave / valor de manera que las operaciones de búsqueda de valor es lo más rápido que las operaciones de búsqueda por índice.

Una implementación adecuada dependerá de sus supuestos y necesidades. Algunas muestras son:

-- return the first integer index holding the value 
function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

-- return any key holding the value 
function AKeyOf(t,val)
    for k,v in pairs(t) do 
        if v == val then return k end
    end
end

-- return all keys holding the value
function AllKeysOf(t,val)
    local s={}
    for k,v in pairs(t) do 
        if v == val then s[#s+1] = k end
    end
    return s
end

-- invert a table so that each value is the key holding one key to that value 
-- in the original table.
function Invert(t)
    local i={}
    for k,v in pairs(t) do 
        i[v] = k
    end
    return i
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top