Software /
code /
prosody
Changeset
918:967edf874df7
util.array: New array library
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 25 Mar 2009 03:00:09 +0000 |
parents | 917:f12f88b3d4a1 |
children | 919:75b8afb79143 |
files | util/array.lua |
diffstat | 1 files changed, 45 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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