diff options
author | Matthew Wild <mwild1@gmail.com> | 2009-03-25 03:00:09 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2009-03-25 03:00:09 +0000 |
commit | 7b1eacf880c960310c3557065345156763f5fb8b (patch) | |
tree | eb76afe4b3884a634e775b41027216cda08df22c | |
parent | db2a808e1412fa6f25b2a16a84cc5e250ca9da03 (diff) | |
download | prosody-7b1eacf880c960310c3557065345156763f5fb8b.tar.gz prosody-7b1eacf880c960310c3557065345156763f5fb8b.zip |
util.array: New array library
-rw-r--r-- | util/array.lua | 45 |
1 files changed, 45 insertions, 0 deletions
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 |