Module talk:TableTools
Appearance
removeDuplicate does not remove duplicate NaN
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
This should be:
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists, hasNan = {}, {}, nil
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys in exists[], and they are also equal to each other in Lua.
-- But we want only one Nan in ret[], and there may be multiple Nan's in t[].
if not hasNan then
ret[#ret + 1] = v
hasNan = true
end
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end