Reputation: 9828
i am having a table in lua
test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
I want to remove all duplicate elements in table.
Output should be
test = {1,2,4,3,"A","B"}
My try :
> 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>
It is working fine now. Thanks for answers and comments.
Upvotes: 13
Views: 22730
Reputation: 9828
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
Output -
1 2 4 3 A B>
Upvotes: 0
Reputation: 157
local xx = {'a','b','c','d','a','d','f','g','a'}
table.sort(xx)
local result = {}
for key,value in ipairs(xx) do
if value ~=xx[key+1] then
table.insert(result,value)
end
end
for key,value in ipairs(result) do
print(key,value)
end
Upvotes: 3
Reputation: 5041
Similar to example given by @Dimitry but only one loop
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
Upvotes: 26
Reputation: 3660
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
... a simple, straightforward solution just from the head, but I think, the hint is given in the PiL book
what have you tried to solve the problem?
Upvotes: 4