From 7b1eacf880c960310c3557065345156763f5fb8b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Wed, 25 Mar 2009 03:00:09 +0000 Subject: util.array: New array library --- util/array.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 util/array.lua (limited to 'util/array.lua') diff --git a/util/array.lua b/util/array.lua new file mode 100644 index 00000000..5b535fc1 --- /dev/null +++ b/util/array.lua @@ -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 -- cgit v1.2.3