Comparison

util/array.lua @ 4440:c60ed6732b34

util.array: Expand some of the more basic methods to act more sensibly than their names suggested
author Matthew Wild <mwild1@gmail.com>
date Wed, 07 Dec 2011 05:14:58 +0000
parent 4439:1c8d2c0d02db
child 4448:d745f4c28294
comparison
equal deleted inserted replaced
4439:1c8d2c0d02db 4440:c60ed6732b34
23 return res:append(a1):append(a2); 23 return res:append(a1):append(a2);
24 end 24 end
25 25
26 setmetatable(array, { __call = new_array }); 26 setmetatable(array, { __call = new_array });
27 27
28 -- Read-only methods
29 function array_methods:random()
30 return self[math.random(1,#self)];
31 end
32
33 -- These methods can be called two ways:
34 -- array.method(existing_array, [params [, ...]]) -- Create new array for result
35 -- existing_array:method([params, ...]) -- Transform existing array into result
36 --
28 function array_base.map(outa, ina, func) 37 function array_base.map(outa, ina, func)
29 for k,v in ipairs(ina) do 38 for k,v in ipairs(ina) do
30 outa[k] = func(v); 39 outa[k] = func(v);
31 end 40 end
32 return outa; 41 return outa;
65 outa[i] = ina[i][key]; 74 outa[i] = ina[i][key];
66 end 75 end
67 return outa; 76 return outa;
68 end 77 end
69 78
70 --- These methods only mutate 79 --- These methods only mutate the array
71 function array_methods:random()
72 return self[math.random(1,#self)];
73 end
74
75 function array_methods:shuffle(outa, ina) 80 function array_methods:shuffle(outa, ina)
76 local len = #self; 81 local len = #self;
77 for i=1,#self do 82 for i=1,#self do
78 local r = math.random(i,len); 83 local r = math.random(i,len);
79 self[i], self[r] = self[r], self[i]; 84 self[i], self[r] = self[r], self[i];
96 self[len+i] = array[i]; 101 self[len+i] = array[i];
97 end 102 end
98 return self; 103 return self;
99 end 104 end
100 105
101 array_methods.push = table.insert; 106 function array_methods:push(x)
102 array_methods.pop = table.remove; 107 table.insert(self, x);
103 array_methods.concat = table.concat; 108 end
104 array_methods.length = function (t) return #t; end 109
110 function array_methods:pop(x)
111 local v = self[x];
112 table.remove(self, x);
113 return v;
114 end
115
116 function array_methods:concat(sep)
117 return table.concat(array.map(self, tostring), sep);
118 end
119
120 function array_methods:length()
121 return #self;
122 end
105 123
106 --- These methods always create a new array 124 --- These methods always create a new array
107 function array.collect(f, s, var) 125 function array.collect(f, s, var)
108 local t = {}; 126 local t = {};
109 while true do 127 while true do