# HG changeset patch # User Matthew Wild # Date 1237950009 0 # Node ID 967edf874df79c31e40018a2d4438a4f0cc558c4 # Parent f12f88b3d4a181a2d20b41101ad6e81e09e9a06e util.array: New array library diff -r f12f88b3d4a1 -r 967edf874df7 util/array.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/util/array.lua Wed Mar 25 03:00:09 2009 +0000 @@ -0,0 +1,45 @@ +local array_methods = {}; +local array_mt = { __index = array_methods, __tostring = function (array) return array:concat(", "); end }; + +local function array(t) + return setmetatable(t or {}, array_mt); +end + +function array_methods:map(func, t2) + local t2 = t2 or array{}; + for k,v in ipairs(self) do + t2[k] = func(v); + end + return t2; +end + +function array_methods:filter(func, t2) + local t2 = t2 or array{}; + for k,v in ipairs(self) do + if func(v) then + t2:push(v); + end + end + return t2; +end + + +array_methods.push = table.insert; +array_methods.pop = table.remove; +array_methods.sort = table.sort; +array_methods.concat = table.concat; +array_methods.length = function (t) return #t; end + +function array_methods:random() + return self[math.random(1,#self)]; +end + +function array_methods:shuffle() + local len = #self; + for i=1,#self do + local r = math.random(i,len); + self[i], self[r] = self[r], self[i]; + end +end + +_G.array = array