Módulo:TableTools/doc
Esta é uma subpágina de documentação para o Módulo:TableTools. Ela contém informações sobre o seu uso, categorias, bem como todo o conteúdo que não faz parte do módulo original. |
Este módulo depende dos seguintes outros módulos: |
Este módulo inclui várias funções para lidar com tabelas Lua. É um metamódulo, destinado a ser chamado a partir de outros módulos Lua e não deve ser chamado diretamente a partir de "#invoke".
Carregando o módulo
editarPara usar qualquer uma das funções, primeiro é necessário carregar o módulo.
local TableTools = require('Módulo:TableTools')
isPositiveInteger
editarTableTools.isPositiveInteger(value)
Esta função retorna true
se value
for um número inteiro positivo e false
se não for. Embora não opere em tabelas, está incluída aqui porque é útil para determinar se uma determinada chave de tabela está na parte arranjo ou na parte hash de uma tabela.
isNan
editarTableTools.isNan(value)
Esta função retorna true
se value
for um valor NaN e false
se não for. Embora não opere em tabelas, está incluída aqui porque é útil para determinar se um valor pode ser uma chave de tabela válida. (Lua gerará um erro se um valor NaN for usado como uma chave de tabela.)
shallowClone
editarTableTools.shallowClone(t)
Esta função retorna um clone de uma tabela. O valor retornado é uma nova tabela, mas todas as subtabelas e funções são compartilhadas. Os metamétodos são respeitados, mas a tabela retornada não terá metatabela própria. Se você quiser criar uma nova tabela sem subtabelas compartilhadas e com metatabelas transferidas, você pode usar mw.clone
. Se você deseja criar uma nova tabela sem subtabelas compartilhadas e sem metatabelas transferidas, use deepCopy
com a opção noMetatable
.
removeDuplicates
editarTableTools.removeDuplicates(t)
Esta função remove valores duplicados de um arranjo. Esta função foi projetada para funcionar apenas com arranjos padrões: as chaves que não são números inteiros positivos são ignoradas, assim como todos os valores após o primeiro valor nil
. (Para arranjos contendo valores nil
, você pode usar compressSparseArray
primeiro.) A função tenta preservar a ordem do arranjo: o primeiro valor que não for exclusivo (único) é mantido e todos os valores duplicados subsequentes são removidos. Por exemplo, para a tabela {5, 4, 4, 3, 4, 2, 2, 1}
removeDuplicates
retornará {5, 4, 3, 2, 1}
.
numKeys
editarTableTools.numKeys(t)
Esta função pega uma tabela t
e retorna um arranjo contendo os números de quaisquer chaves inteiras positivas que tenham valores que não são nulos, classificados em ordem numérica. Por exemplo, para a tabela {'foo', nil, 'bar', 'baz', a = 'b'}
, numKeys
retornará {1, 3, 4}
.
affixNums
editarTableTools.affixNums(t, prefix, suffix)
Esta função pega uma tabela t
e retorna um arranjo contendo os números de chaves com o prefixo opcional prefix
e o sufixo opcional suffix
. Por exemplo, para a tabela {a1 = 'foo', a3 = 'bar', a6 = 'baz'}
e o prefixo 'a'
, affixNums
retornará {1, 3, 6}
. Todos os caracteres em prefix
e suffix
são interpretados literalmente.
numData
editarTableTools.numData(t, compress)
Dada uma tabela com chaves como "foo1"
, "bar1"
, "foo2"
e "baz2"
, esta função retorna uma tabela de subtabelas no formato { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text' } }
. As chaves que não terminam com um número inteiro são armazenadas em uma subtabela chamada "other"
. A opção "compress" comprime a tabela para que possa ser iterada com ipairs
.
compressSparseArray
editarTableTools.compressSparseArray(t)
Esta função pega um arranjo t
com um ou mais valores nulos, e remove os valores nulos enquanto preserva a ordem, para que o arranjo possa ser percorrido com segurança com ipairs
. Quaisquer chaves que não sejam números inteiros positivos são removidas. Por exemplo, para a tabela {1, nil, foo = 'bar', 3, 2}
, compressSparseArray
retornará {1, 3, 2}
.
sparseIpairs
editarTableTools.sparseIpairs(t)
Esta é uma função iteradora para percorrer um arranjo esparso t
. É semelhante a ipairs
, mas continuará a iterar até a chave numérica mais alta, enquanto ipairs
pode parar após o primeiro valor nil
. Quaisquer chaves que não sejam números inteiros positivos são ignoradas.
Normalmente, sparseIpairs
é usada em um loop for
genérico.
for i, v in TableTools.sparseIpairs(t) do
-- bloco de código
end
Observe que sparseIpairs
usa a função pairs
em sua implementação. Embora algumas chaves da tabela pareçam ser ignoradas, todas as chaves da tabela são acessadas quando ela é executada.
size
editarTableTools.size(t)
Localiza o tamanho de uma tabela de pares chave/valor (arranjo associativo). Por exemplo, para a tabela {foo = 'foo', bar = 'bar'}
, size
retornará 2
. A função também funcionará em arranjos, mas para arranjos é mais eficiente usar o operador #
. Observe que para encontrar o tamanho, esta função usa a função pairs
para percorrer todas as chaves.
keysToList
editarTableTools.keysToList(t, keySort, checked)
Esta função retorna uma lista das chaves em uma tabela, classificadas usando uma função de comparação padrão ou uma função keySort
personalizada, que segue as mesmas regras da função comp
fornecida para table.sort
. Se keySort
for false
, nenhuma classificação será feita. É necessário definir checked
como true
para pular a verificação interna de tipo.
sortedPairs
editarTableTools.sortedPairs(t, keySort)
Esta função itera por meio de uma tabela, com as chaves classificadas usando a função keysToList
. Se houver apenas chaves numéricas, sparseIpairs
provavelmente será mais eficiente.
isArray
editarTableTools.isArray(value)
Esta função retorna true
se value
for uma tabela e todas as chaves forem inteiros consecutivos começando em 1.
isArrayLike
editarTableTools.isArrayLike(value)
Esta função retorna true
se value
for iterável e todas as chaves forem inteiros consecutivos começando em 1.
invert
editarTableTools.invert(arr)
Esta função transpõe as chaves e valores em um arranjo. Por exemplo, invert{ "a", "b", "c" }
resulta em { a=1, b=2, c=3 }
.
listToSet
editarTableTools.listToSet(arr)
Esta função cria um conjunto a partir da parte arranjo da tabela arr
. A indexação do conjunto por qualquer um dos valores do arranjo retorna true
. Por exemplo, listToSet{ "a", "b", "c" }
resulta em { a=true, b=true, c=true }
.
deepCopy
editarTableTools.deepCopy(orig, noMetatable, alreadySeen)
Esta função cria uma cópia da tabela orig
. Como em mw.clone
, todos os valores que não são funções são duplicados e a identidade das tabelas é preservada. Se noMetatable
for true
, então a metatabela (se houver) não será copiada. Ela pode copiar tabelas carregadas com mw.loadData
.
Similar à mw.clone
, mas mw.clone
não pode copiar tabelas carregadas com mw.loadData
e não permite que metatabelas não sejam copiadas.
sparseConcat
editarTableTools.sparseConcat(t, sep, i, j)
Esta função concatena todos os valores na tabela que são indexados por um número inteiro positivo, em ordem. Por exemplo, sparseConcat{ "a", nil, "c", "d" }
resulta em "acd"
e sparseConcat{ nil, "b ", "c", "d" }
resulta em "bcd"
.
length
editarTableTools.length(t, prefix)
Esta função localiza o comprimento de um arranjo ou de um quasi-arranjo com chaves com um prefix
opcional como "data1", "data2", etc. Ela usa um algoritmo de pesquisa exponencial para encontrar o comprimento, de modo a usar o mínimo possível de pesquisas de tabela.
Este algoritmo é útil para arranjos que usam metatabelas (por exemplo, frame.args) e para quasi-arranjos. Para arranjos normais, basta usar o operador #, pois ele é implementado em C e será mais rápido.
inArray
editarTableTools.inArray(array, searchElement)
TableTools.inArray(array, searchElement, fromIndex)
Retorna true
se searchElement
for um membro do arranjo array
, e false
caso contrário. Equivalente à função javascript Array.prototype.includes(), exceto que "fromIndex" é indexado em 1 em vez de indexado em zero.
fromIndex
editarfromIndex
é o índice opcional de base 1 no qual iniciar a pesquisa. Se fromIndex
não estiver presente, todos os valores no array serão pesquisados e o array será tratado como uma tabela/array associativo (será iterado usando pairs()
).
Se fromIndex
estiver presente e for um inteiro, o arranjo é assumido como um arranjo/sequência/lista convencional (indexado com chaves inteiras consecutivas começando em 1
, e interagindo usando ipairs()
). Somente os valores cujo índice é fromIndex
ou maior serão pesquisados.
Nos exemplos a seguir, #array
representa o comprimento da parte com chave inteira do arranjo.
- Se
fromIndex < 0
, ele contará de volta do final do arranjo, por exemplo, um valor de-1
pesquisará apenas o último elemento com chave de inteiro no arranjo. SefromIndex <= (-1 * #array)
, toda a porção com chave de inteiro do arranjo será pesquisada. - Se
fromIndex = 0
, ele será tratado como1
e toda a porção com chave de inteiro do arranjo será pesquisada. - Se
fromIndex > #array
, o arranjo não será pesquisado efalse
será retornado.
merge
editarTableTools.merge(...)
Dados os arranjos, retorna um arranjo contendo os elementos de cada arranjo de entrada em sequência.
extend
editarTableTools.extend(arr1, arr2)
Estende o primeiro arrabjo no local anexando todos os elementos do segundo arranjo.