918
|
1 |
local array_methods = {}; |
|
2 |
local array_mt = { __index = array_methods, __tostring = function (array) return array:concat(", "); end }; |
|
3 |
|
|
4 |
local function array(t) |
|
5 |
return setmetatable(t or {}, array_mt); |
|
6 |
end |
|
7 |
|
|
8 |
function array_methods:map(func, t2) |
|
9 |
local t2 = t2 or array{}; |
|
10 |
for k,v in ipairs(self) do |
|
11 |
t2[k] = func(v); |
|
12 |
end |
|
13 |
return t2; |
|
14 |
end |
|
15 |
|
|
16 |
function array_methods:filter(func, t2) |
|
17 |
local t2 = t2 or array{}; |
|
18 |
for k,v in ipairs(self) do |
|
19 |
if func(v) then |
|
20 |
t2:push(v); |
|
21 |
end |
|
22 |
end |
|
23 |
return t2; |
|
24 |
end |
|
25 |
|
|
26 |
|
|
27 |
array_methods.push = table.insert; |
|
28 |
array_methods.pop = table.remove; |
|
29 |
array_methods.sort = table.sort; |
|
30 |
array_methods.concat = table.concat; |
|
31 |
array_methods.length = function (t) return #t; end |
|
32 |
|
|
33 |
function array_methods:random() |
|
34 |
return self[math.random(1,#self)]; |
|
35 |
end |
|
36 |
|
|
37 |
function array_methods:shuffle() |
|
38 |
local len = #self; |
|
39 |
for i=1,#self do |
|
40 |
local r = math.random(i,len); |
|
41 |
self[i], self[r] = self[r], self[i]; |
|
42 |
end |
|
43 |
end |
|
44 |
|
|
45 |
_G.array = array |