2011-07-08 15 views
8

Tengo una tabla de cadenas. Me gustaría una forma fácil de eliminar todos los duplicados de la tabla.Lua: forma más inteligente de agregar a la tabla solo si no está ya en la tabla, o eliminar duplicados

Así que si la mesa es {a, b, c, c, d, e, e}, después de esta operación sería {a, b, c, d, e}

alternativa, y, probablemente, de preferencia, ¿hay una manera de agregar un elemento a una tabla, pero sólo si no está ya contenida dentro de la mesa.

< \ noobquestion>

Respuesta

7

lo que normalmente hago de esto es índice de la tabla de la cadena así que por ejemplo

tbl[mystring1] = 1 
tbl[mystring2] = 1 

etc.

Cuando se agrega una cadena sólo tiene que utilizar las líneas arriba y los duplicados serán atendidos. A continuación, puede usar un ciclo para ... pares do para leer los datos.

Si desea contar el número de apariciones

usar algo como

if tbl[mystring1] == nil then 
    tbl[mystring1] = 1 
else 
    tbl[mystring1] = tbl[mystring1] + 1 
end 

A medida que el final del ciclo Además, si hay que girar la mesa alrededor de usted simplemente puede usar algo como

newtbl = {} 
for s,c in pairs(tbl) do 
    table.insert(newtbl,s) 
end 
4

La manera más simple es usar las tablas como claves, no como valores, en su "tabla de contenedores".

Llamemos a la tabla de contenedor values. Actualmente debe estar haciendo algo similar a esto para añadir elementos a la misma:

table.insert(values, value) 

Y PARSE values así:

for i,v in ipairs(values) do 
    -- v contains the internal values 
end 

Con el fin de tener las tablas de una sola vez, puede insertarlos este otra manera:

t[value] = 1 

Esto asegurará que los valores insertados (cadenas, tablas, números, lo que sea) se incluyen sólo una vez, ya que serán 'sobrescribir'.

A continuación, puede analizar t así:

for k,_ in pairs(values) do 
    -- k contains the internal tables 
end 
Cuestiones relacionadas