Comparison

util/array.lua @ 9529:6a1e7723208b

util.array: Add __div for parity with util.set
author Matthew Wild <mwild1@gmail.com>
date Sun, 21 Oct 2018 15:38:55 +0100
parent 9528:1af7cc3b9747
child 10592:9918b4b0cd58
comparison
equal deleted inserted replaced
9528:1af7cc3b9747 9529:6a1e7723208b
50 return false; 50 return false;
51 end 51 end
52 return true; 52 return true;
53 end 53 end
54 54
55 function array_mt.__div(a1, func)
56 local a2 = new_array();
57 local o = 0;
58 for i = 1, #a1 do
59 local new_value = func(a1[i]);
60 if new_value ~= nil then
61 o = o + 1;
62 a2[o] = new_value;
63 end
64 end
65 return a2;
66 end
67
55 setmetatable(array, { __call = new_array }); 68 setmetatable(array, { __call = new_array });
56 69
57 -- Read-only methods 70 -- Read-only methods
58 function array_methods:random() 71 function array_methods:random()
59 return self[math_random(1, #self)]; 72 return self[math_random(1, #self)];
73 end
74
75 -- Return a random value excluding the one at idx
76 function array_methods:random_other(idx)
77 local max = #self;
78 return self[((math.random(1, max-1)+(idx-1))%max)+1];
60 end 79 end
61 80
62 -- These methods can be called two ways: 81 -- These methods can be called two ways:
63 -- array.method(existing_array, [params [, ...]]) -- Create new array for result 82 -- array.method(existing_array, [params [, ...]]) -- Create new array for result
64 -- existing_array:method([params, ...]) -- Transform existing array into result 83 -- existing_array:method([params, ...]) -- Transform existing array into result