17 214
contributi
(Inserito conteggio dei soli indici numerici in table.getn, visto che l'operatore # spesso non funziona in scribunto *** sovrascritto il testo esistente ***) |
(Inserite funzioni deepSearch e map) |
||
local t = {}
--[[
Ricerca lineare: si passa una table e un valore e
restituisce il suo indice o nil
--]]
table.search = function(tab, value)
for k, v in pairs(tab) do
if v == value then
end
table.
table.search, table.search
t.search, t.linearSearch, t.linear_search =
table.search, table.search, table.search
--[[
Ricerca ricorsiva: cerca un valore in una table e
in eventuali subtables. Ritorna una lista di indici,
l'ultimo per l'elemento, i precedenti per le subtables.
Se l'elemento non è presente, ritorna nil
Esempio: t.deep_search({'a', {'b', 'c'}}, 'b') --> 2, 1
--]]
table.deepSearch = function(tab, value)
for k, v in pairs(tab) do
if v == value then
return k
end
if type(v) == 'table' then
--[[
If the last list element is not nil, value
has been found, thus returning
--]]
local valueKey = table.deepSearch(v, value)
if table.remove({valueKey}) then
return k, valueKey
end
end
end
return nil
end
table.deep_search, table.recursiveSearch, table.recursive_search =
table.deepSearch, table.deepSearch, table.deepSearch
t.deepSearch, t.deep_search, t.recursiveSearch, t.recursive_search =
table.deepSearch, table.deepSearch, table.deepSearch, table.deepSearch
--[[
Ritorna il numero di elementi di una table,
solo quelli con indici numerici se il secondo
argomento è true o 'num', altrimenti anche
quelli con indice diverso.
--]]
table.getn = function(self, count)
t.getn = table.getn
--[[
chiavi degli elementi di cui si vogliono creare gli alias; il terzo una table
di cui ogni elemento è a sua volta una table, che contiene le chiavi degli alias
relativi all'elemento di indice uguale nel secondo argomento.
Esempio di chiamata:
table.tableKeysAlias(t, {'key', 'key1'}, {{'alias', alias1'}, {'alias2', 'alias3'}})
Equivalente con assegnamenti:
t.alias, t.alias1 = t.key, t.key
t.alias2, t.alias3 = t.key1, t.key1
--]]
table.tableKeysAlias = function(tab, source, dest)
end
table.tableKeysAlias, table.tableKeysAlias, table.tableKeysAlias
t.tableKeysAlias, t.table_keys_alias, t.keysAlias, t.keys_alias =
table.tableKeysAlias, table.tableKeysAlias, table.tableKeysAlias, table.tableKeysAlias
--[[
Applica una funzione ad ogni elemento di una table.
La funzione riceve in ingresso un elemento e la sua
chiave, in quest'ordine perché la chiave non è sempre
necessaria e sarebbe fastidioso avere un argomento
placeholder.
Il risultato viene ritornato in una nuova table, se
inPlace è false, altrimenti viene modificata quella
in ingresso.
L'ordine in cui gli elementi sono processati è casuale
se sequential è false, sequenziale (per i soli indici
numerici) altrimenti.
Tab e funct non hanno valori default per ovvi motivi,
mentre sequential e inPlace lo hanno entrambi a false
--]]
table.map = function(tab, funct, sequential, inPlace)
local dest = inPlace and tab or {}
local iterator = sequential and ipairs or pairs
for key, value in iterator(tab) do
dest[key] = funct(value, key)
end
return dest
end
t.map = table.map
return t
|
contributi