Lua: удалить повторяющиеся элементы

у меня есть стол в lua

test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}

Я хочу, чтобы удалить все повторяющиеся элементы в таблице.
Выход должен быть

test = {1,2,4,3,"A","B"}

EDIT:

мой попробовать :

> items = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
> flags = {}
> for i=1,table.getn(items)  do
if not flags[items[i]] then
      io.write(' ' .. items[i])
      flags[items[i]] = true
   end
>> end
 1 2 4 3 A B>

Теперь он работает нормально. Спасибо за ответы и комментарии.

4 ответов


подобно примеру, приведенному @Dimitry, но только один цикл

local test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
local hash = {}
local res = {}

for _,v in ipairs(test) do
   if (not hash[v]) then
       res[#res+1] = v -- you could print here instead of saving to result table if you wanted
       hash[v] = true
   end

end

local test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}

-- make unique keys
local hash = {}
for _,v in ipairs(test) do
    hash[v] = true
end

-- transform keys back into values
local res = {}
for k,_ in pairs(hash) do
    res[#res+1] = k
end

-- 1 2 3 4 A B
for _,v in ipairs(res) do
    print(v)
end

test = res

... простое, простое решение просто с головы, но я думаю, подсказка дана в книге PiL

что вы пытались решить проблему?


> items = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
> flags = {}
> for i=1,table.getn(items)  do
if not flags[items[i]] then
      io.write(' ' .. items[i])
      flags[items[i]] = true
   end
>> end
 1 2 4 3 A B>

local xx = {'a','b','c','d','a','d','f','g','a'}

таблица.sort (xx)

локальный результат = {}

для ключа значение в ipairs (xx) do

если значение ~=xx[ключ+1], то

  table.insert(result,value)

конец

конец

для ключа значение в ipairs (результат) do печать(ключ,значение)
конец