Differenze tra le versioni di "Modulo:Wikilib/tables"

Inserite funzioni deepSearch e map
(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
 
Ricerca lineare: si passa una table e un valore e
t.linear_search = function(tab, value)
restituisce il suo indice o nil
 
--]]
 
table.search = function(tab, value)
for k, v in pairs(tab) do
if v == value then
end
 
table.linear_searchlinearSearch, table.search, t.searchlinear_search =
table.search, table.search
t.linear_search, t.linear_search, t.linear_search
t.search, t.linearSearch, t.linear_search =
table.search, table.search, table.search
 
--[[
-- Ritorna il numero di elementi di una table,
 
-- solo quelli con indici numerici se il secondo
Ricerca ricorsiva: cerca un valore in una table e
-- argomento è true o 'num', altrimenti anche
in eventuali subtables. Ritorna una lista di indici,
-- quelli con indice diverso.
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
 
--[[
-- Aggiunge elementi ad una table che sono alias di altri elementi della stessa table.
 
-- Il primo argomento è la table in questione; il secondo una table contenente le
-- chiavi degliAggiunge elementi diad cuiuna sitable voglionoche creare glisono alias; ildi terzoaltri unaelementi della stessa table.
--Il diprimo cuiargomento ogniè elementola ètable ain suaquestione; voltail secondo una table, che contienecontenente le chiavi degli alias
chiavi degli elementi di cui si vogliono creare gli alias; il terzo una table
-- relativi all'elemento di indice uguale nel secondo argomento.
di cui ogni elemento è a sua volta una table, che contiene le chiavi degli alias
-- Esempio di chiamata:
relativi all'elemento di indice uguale nel secondo argomento.
-- table.tableKeysAlias(t, {'key', 'key1'}, {{'alias', alias1'}, {'alias2', 'alias3'}})
Esempio di chiamata:
-- Equivalente con assegnamenti:
table.tableKeysAlias(t, {'key', 'key1'}, {{'alias', alias1'}, {'alias2', 'alias3'}})
-- t.alias, t.alias1 = t.key, t.key
Equivalente con assegnamenti:
-- t.alias2, t.alias3 = t.key1, t.key1
t.alias, t.alias1 = t.key, t.key
t.alias2, t.alias3 = t.key1, t.key1
 
--]]
 
table.tableKeysAlias = function(tab, source, dest)
end
 
ttable.tableKeysAliastable_keys_alias, table.keysAlias =, table.tableKeysAlias,keys_alias table.tableKeysAlias=
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