[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Table compare
- From: "G.H." <code933k@...>
- Date: Sat, 27 Dec 2008 12:35:53 -0500
> Is there a better/simpler way to do a shallow table compare (meaning
> that the two tables must have the same keys with identical values)?
>
> function compareTables(t1, t2)
> -- all key-value pairs in t1 must be in t2
> for k, v in pairs(t1) do
> if t2[k] ~= v then return false end
> end
> -- there must not be other keys in t2
> for k, v in pairs(t2) do
> if t1[k] == nil then return false end
> end
> return true
> end
>
> Enrico
I assume your question to be restricted to "pure Lua"
scripting. So a 'crazy Moe' version could be:
function compareTables(t1, t2)
return (#a == #b) and (unpack(t1) == unpack(t2))
end
I love understandable and short 'Crazy Moe' solutions.
Though, we all know 'common sense' ~= testing and benchmarks...
Replacing the unpack with your first loop makes exactly
the same you intended to do in a cleaner and faster
way however.
IMHO the following is a more rational solution
[...] in the same unpack(TM) fashion. Perhaps surprisingly
faster as this one exits quickly on limit cases
(but I myself consider this 'if' usage very inelegant)
function compareTables(t1, t2)
if a == b then
return true
elseif #a == #b then
return unpack(t1) == unpack(t2)
else
return false
end
end
Once again, this is untested and you aren't talking
to an expert :p
Greetings.
--
Mario García H.