isdict

function isdict( tab ) --> res

Description

Checks if tab is a dictionary table. If tab is not a table returns the function nil and an error message.

Parameters

tab

Table that should be checked.

Return Values

res

Is true if tab is a dictionary table, otherwise false.

Code

--ZFUNC-isdict-v1
local function isdict( tab ) --> res
   if type( tab ) ~= "table" then return nil, "Argument is not a table! It is: "..type( tab ) end

   --check if all the table keys are numerical and count their number
   local count = 0
   for k, v in pairs( tab ) do
      if type( k ) == "number" then count = count + 1 else return true end
   end

   --all keys are numerical. now let's see if they are sequential and start with 1
   for i = 1, count do
      if not tab[ i ] and type( tab[ i ] ) ~= "nil" then return true end
   end

   return false
end

return isdict

Examples

local t = require( "taptest" )
local isdict = require( "isdict" )

t( isdict{ name="rupert pupkin", color="red"  }, true )
t( isdict{ "a", "b", "c", "d" }, false )

t()

Inspired by

See also