From f1f5f74ad3c9b66cf60b5e86b5fc12afe52a448b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Wed, 7 Dec 2011 05:04:55 +0000 Subject: util.array: Add pluck() method to pick a given property from each item --- util/array.lua | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'util/array.lua') diff --git a/util/array.lua b/util/array.lua index 5dbd3037..cf586214 100644 --- a/util/array.lua +++ b/util/array.lua @@ -60,6 +60,13 @@ function array_base.sort(outa, ina, ...) return outa; end +function array_base.pluck(outa, ina, key) + for i=1,#ina do + outa[i] = ina[i][key]; + end + return outa; +end + --- These methods only mutate function array_methods:random() return self[math.random(1,#self)]; -- cgit v1.2.3 From f1f40bc3ca38cf67e38bcf844a6d99a9a4f9e9bb Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Wed, 7 Dec 2011 05:14:58 +0000 Subject: util.array: Expand some of the more basic methods to act more sensibly than their names suggested --- util/array.lua | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'util/array.lua') diff --git a/util/array.lua b/util/array.lua index cf586214..cbb051d3 100644 --- a/util/array.lua +++ b/util/array.lua @@ -25,6 +25,15 @@ end setmetatable(array, { __call = new_array }); +-- Read-only methods +function array_methods:random() + return self[math.random(1,#self)]; +end + +-- These methods can be called two ways: +-- array.method(existing_array, [params [, ...]]) -- Create new array for result +-- existing_array:method([params, ...]) -- Transform existing array into result +-- function array_base.map(outa, ina, func) for k,v in ipairs(ina) do outa[k] = func(v); @@ -67,11 +76,7 @@ function array_base.pluck(outa, ina, key) return outa; end ---- These methods only mutate -function array_methods:random() - return self[math.random(1,#self)]; -end - +--- These methods only mutate the array function array_methods:shuffle(outa, ina) local len = #self; for i=1,#self do @@ -98,10 +103,23 @@ function array_methods:append(array) return self; end -array_methods.push = table.insert; -array_methods.pop = table.remove; -array_methods.concat = table.concat; -array_methods.length = function (t) return #t; end +function array_methods:push(x) + table.insert(self, x); +end + +function array_methods:pop(x) + local v = self[x]; + table.remove(self, x); + return v; +end + +function array_methods:concat(sep) + return table.concat(array.map(self, tostring), sep); +end + +function array_methods:length() + return #self; +end --- These methods always create a new array function array.collect(f, s, var) -- cgit v1.2.3 From 5cc76d979406b69055da5967865a7c35fe99bb8a Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Fri, 9 Dec 2011 11:57:14 +0500 Subject: util.array: Make array:push() chainable. --- util/array.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'util/array.lua') diff --git a/util/array.lua b/util/array.lua index cbb051d3..fdf3c9a3 100644 --- a/util/array.lua +++ b/util/array.lua @@ -105,6 +105,7 @@ end function array_methods:push(x) table.insert(self, x); + return self; end function array_methods:pop(x) -- cgit v1.2.3 From 5a64ace81c91f534637555c60ee35dbfa5f6ac26 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Fri, 9 Dec 2011 12:02:21 +0500 Subject: util.array: Avoid globals. --- util/array.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'util/array.lua') diff --git a/util/array.lua b/util/array.lua index fdf3c9a3..5dc604ba 100644 --- a/util/array.lua +++ b/util/array.lua @@ -9,6 +9,11 @@ local t_insert, t_sort, t_remove, t_concat = table.insert, table.sort, table.remove, table.concat; +local setmetatable = setmetatable; +local math_random = math.random; +local pairs, ipairs = pairs, ipairs; +local tostring = tostring; + local array = {}; local array_base = {}; local array_methods = {}; @@ -27,7 +32,7 @@ setmetatable(array, { __call = new_array }); -- Read-only methods function array_methods:random() - return self[math.random(1,#self)]; + return self[math_random(1,#self)]; end -- These methods can be called two ways: @@ -80,7 +85,7 @@ end function array_methods:shuffle(outa, ina) local len = #self; for i=1,#self do - local r = math.random(i,len); + local r = math_random(i,len); self[i], self[r] = self[r], self[i]; end return self; @@ -104,18 +109,18 @@ function array_methods:append(array) end function array_methods:push(x) - table.insert(self, x); + t_insert(self, x); return self; end function array_methods:pop(x) local v = self[x]; - table.remove(self, x); + t_remove(self, x); return v; end function array_methods:concat(sep) - return table.concat(array.map(self, tostring), sep); + return t_concat(array.map(self, tostring), sep); end function array_methods:length() @@ -128,7 +133,7 @@ function array.collect(f, s, var) while true do var = f(s, var); if var == nil then break; end - table.insert(t, var); + t_insert(t, var); end return setmetatable(t, array_mt); end -- cgit v1.2.3