Logo

Programming-Idioms

History of Idiom 26 > diff from v42 to v43

Edit summary for version 43 by programming-idioms.org:
[Lua] Variable name x

Version 42

2018-06-24, 10:24:17

Version 43

2018-06-24, 10:27:14

Idiom #26 Create a 2-dimensional array

Declare and initialize a matrix x having m rows and n columns, containing real numbers.

Illustration

Idiom #26 Create a 2-dimensional array

Declare and initialize a matrix x having m rows and n columns, containing real numbers.

Illustration
Code
local array = setmetatable({},{
   __index = function(t1,k1)
      t1[k1] = setmetatable({},{
         __index = function(t2,k2)
            t2[k2] = 0
            return t2[k2]
         end
      })
      return t1[k1]
   end
})
Code
local x = setmetatable({},{
   __index = function(t1,k1)
      t1[k1] = setmetatable({},{
         __index = function(t2,k2)
            t2[k2] = 0
            return t2[k2]
         end
      })
      return t1[k1]
   end
})
Comments bubble
2D arrays are tables of tables (tables are hashmaps).

Use metatable to lazy initialize each row (t1[k1]) and each column (t2[k2]) the first time it's accessed.

See http://www.programming-idioms.org/idiom/27/create-a-3-dimensional-array/1675/lua for a more "standard" way.
Comments bubble
2D arrays are tables of tables (tables are hashmaps).

Use metatable to lazy initialize each row (t1[k1]) and each column (t2[k2]) the first time it's accessed.

See http://www.programming-idioms.org/idiom/27/create-a-3-dimensional-array/1675/lua for a more "standard" way.
Doc URL
http://www.lua.org/pil/11.2.html
Doc URL
http://www.lua.org/pil/11.2.html
Demo URL
http://codepad.org/KUJ0koqr
Demo URL
http://codepad.org/e52KGRhA