1
I’m wondering this because I want to know if one table is the same as another, if it’s an empty table or something.
1
I’m wondering this because I want to know if one table is the same as another, if it’s an empty table or something.
0
A table is varied if next(t) == nil, or if tamanhoDaArray <= 0 or tamanhoDaArray == 0.
There are several different ways to check if one table is equal to another.
I suppose you already know that a table is so much array of how much value dictionary with key pairs and values (a.k.a. hash). An array is always guaranteed to be more efficient than a hash (even optimized). Hash fields are only needed in rare and dynamic cases (in which the optimization technique does not help "Inline Caching" in field access).
The comparison you want depends on the structure of the tables x and y. Luiz’s comment leads you to a simple and efficient comparison of tables, in full, deepcompare. Below I leave some examples¹ to compare arrays only.
[1]: can be used rawget and rawset instead of t[k] and t[k] = v, if there is no metatable.
1) Comparing arrays superficially
local function CompareArraySurface(x, y)
    local xl = #x;
    if xl ~= #y then return false; end
    for i = 1, #x do
        if x[i] ~= y[i] then
            return false;
        end
    end
    return true;
end
local print = (_ENV or _G).print;
print(
    CompareArraySurface({}, { 0, 0, 0 })          --> false,
  , CompareArraySurface({ 4, 1, 3 }, { 4, 1, 3 }) --  true,
  , CompareArraySurface({ { 1 } }, { { 1 } })     --  false
);
2) Comparing multi-dimensional arrays
local CompareDims;
function CompareDims(x, y, dim)
    if dim <= 0 then
        return x == y;
    end
    local xl = #x;
    if xl ~= #y then return false; end
    for i = 1, xl do
        if not CompareDims(x[i], y[i], dim - 1) then
            return false;
        end
    end
    return true;
end
print(
  -- Array bidimensional (2 dimensões)
    CompareDims({ { 5 } }, { { 5 } }, 2) --> true,
  -- Array unidimensional (1 dimensão)
  , CompareDims({ { 5 } }, { { 5 } }, 1) -->  false
);
Browser other questions tagged lua table table
You are not signed in. Login or sign up in order to post.
What is a table decoder?
– lhf
A table
tis empty ifnext(t)==nil.– lhf
For table comparison see http://lua-users.org/lists/lua-l/2014-09/msg00421.html.
– lhf
Let me see if I understand: you want to know if an index already exists or it is still empty, that is, if that item has already been inserted in the table or already exists is this ?
– Rafael Lemos