Software /
code /
prosody
Annotate
util/array.lua @ 920:e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 26 Mar 2009 03:55:45 +0000 |
parent | 918:967edf874df7 |
child | 922:0e45234360cd |
rev | line source |
---|---|
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
1 local array = {}; |
918 | 2 |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
3 local array_mt = { __index = array, __tostring = function (array) return array:concat(", "); end }; |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
4 local function new_array(_, t) |
918 | 5 return setmetatable(t or {}, array_mt); |
6 end | |
7 | |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
8 setmetatable(array, { __call = new_array }); |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
9 |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
10 function array:map(func, t2) |
918 | 11 local t2 = t2 or array{}; |
12 for k,v in ipairs(self) do | |
13 t2[k] = func(v); | |
14 end | |
15 return t2; | |
16 end | |
17 | |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
18 function array:filter(func, t2) |
918 | 19 local t2 = t2 or array{}; |
20 for k,v in ipairs(self) do | |
21 if func(v) then | |
22 t2:push(v); | |
23 end | |
24 end | |
25 return t2; | |
26 end | |
27 | |
28 | |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
29 array.push = table.insert; |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
30 array.pop = table.remove; |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
31 array.sort = table.sort; |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
32 array.concat = table.concat; |
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
33 array.length = function (t) return #t; end |
918 | 34 |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
35 function array:random() |
918 | 36 return self[math.random(1,#self)]; |
37 end | |
38 | |
920
e302cbc9d036
util.array: Expose array.* functions, to be used for unwrapped arrays
Matthew Wild <mwild1@gmail.com>
parents:
918
diff
changeset
|
39 function array:shuffle() |
918 | 40 local len = #self; |
41 for i=1,#self do | |
42 local r = math.random(i,len); | |
43 self[i], self[r] = self[r], self[i]; | |
44 end | |
45 end | |
46 | |
47 _G.array = array |