Saltar para o conteúdo

Módulo:Testes/Gkiyoshinishimoto/TableTools/doc

Origem: Wikipédia, a enciclopédia livre.

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[editar código-fonte]

Para usar qualquer uma das funções, primeiro é necessário carregar o módulo.

local TableTools = require('Módulo:Testes/Gkiyoshinishimoto/TableTools')

isPositiveInteger[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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 é executado.

size[editar código-fonte]

TableTools.size(t)

Localiza o tamanho de uma tabela de pares chave/valor. 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 da tabela, esta função usa a função pairs para percorrer todas as chaves da tabela.

keysToList[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.isArray(value)

Esta função retorna true se value for uma tabela e todas as chaves forem inteiros consecutivos começando em 1.

isArrayLike[editar código-fonte]

TableTools.isArrayLike(value)

Esta função retorna true se value for iterável e todas as chaves forem inteiros consecutivos começando em 1.

invert[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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 }. Consulte também Módulo:Testes/Gkiyoshinishimoto/Lua set [en] para formas mais avançadas de criar um conjunto.

deepCopy[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.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[editar código-fonte]

TableTools.inArray(arr, valueToFind)

Esta função retorna true se valueToFind for um membro do arranjo arr e false se não for.