Função ARRAYINDEXOF

Calcula o índice em que um elemento especificado é encontrado pela primeira vez em uma matriz. A indexação é da esquerda para a direita.
  • O valor de índice mais à esquerda é 0.
  • Se o elemento não for encontrado, será retornado nulo.
  • Para a pesquisa da direita para a esquerda, use ARRAYRIGHTINDEXOF.
    • Se existir apenas um elemento na matriz, ambas as funções retornarão o mesmo valor.
    • Para mais informações, consulte Função ARRAYRIGHTINDEXOF.

Uso básico

Exemplo de referência de literal da matriz:

derive type:single value:ARRAYINDEXOF(["A","B","C","D"],"C")

Saída: calcula o índice do elemento "C" na matriz, que é 2 em um índice baseado em zero.

Exemplo de referência da coluna:

derive type:single value:ARRAYINDEXOF([myValues],myElement) as:myIndexOfmyValues'

Saída: gera a nova coluna myIndexOfmyValues, que contém o índice das matrizes myValues para os elementos listados na coluna myElement.

Sintaxe

derive type:single value:ARRAYINDEXOF(array_ref,my_element)

ArgumentoObrigatório?Tipo de dadosDescrição
array_refSmatriz ou stringNome da coluna da matriz, do literal da matriz ou da função que retorna uma matriz a ser aplicada à função
my_elementSqualquer umO elemento a ser localizado na matriz

Para mais informações sobre os padrões de sintaxe, consulte Observações de sintaxe da documentação da linguagem.

array_ref

Nome da coluna da matriz, do literal da matriz ou da função que retorna uma matriz com o elemento que você quer localizar.

  • Colunas múltiplas e caracteres curinga não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimString (referência ou função de coluna) ou literal de matrizmyArray1

my_element

Elemento literal que você quer localizar na matriz. Pode ser um valor de qualquer tipo de dados.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimQualquer um"1st"

Exemplos

Exemplo: pontos de computação baseados na posição de chegada

Neste exemplo, abordamos as seguintes funções:

  • ARRAYINDEXOF: retorna o valor de índice de uma matriz para o valor especificado, pesquisando da esquerda para a direita. Consulte Função ARRAYINDEXOF.
  • ARRAYRIGHTINDEXOF: retorna o valor de índice de uma matriz para o valor especificado, pesquisando da direita para a esquerda. Consulte Função ARRAYRIGHTINDEXOF.

Origem:

O seguinte conjunto de matrizes contém resultados, em ordem, de uma série de corridas. Com esta lista, o objetivo é gerar a pontuação para cada piloto de acordo com a seguinte matriz de pontuação.

PosiçãoPontos
30
20
10
Último-10
Não terminou-20

Resultados:

RaceIdRaceResults
1["racer3", "racer5", "racer2", "racer1", "racer6"]
2["racer6", "racer4", "racer2", "racer1", "racer3", "racer5"]
3["racer4", "racer3", "racer5", "racer2", "racer6", "racer1"]
4["racer1", "racer2", "racer3", "racer5"]
5["racer5", "racer2", "racer4", "racer6", "racer3"]


Transformação:

Observe que o número de pilotos varia de acordo com cada corrida. Por isso, determinar a posição do último competidor depende do número no evento. O número de pilotos pode ser capturado usando o comando a seguir:

derive type: single value: ARRAYLEN(RaceResults) as: 'countRacers'

Crie colunas contendo os valores de índice para cada piloto. Abaixo está o exemplo para o racer1:

derive type: single value: ARRAYINDEXOF(RaceResults, 'racer1') as: 'arrL-IndexRacer1'

derive type: single value: ARRAYRIGHTINDEXOF(RaceResults, 'racer1') as: 'arrR-IndexRacer1'

É possível comparar os valores nas duas colunas para determinar se são iguais.

OBSERVAÇÃO: se ARRAYINDEXOF e ARRAYRIGHTINDEXOF não retornam o mesmo valor para as mesmas entradas, o valor não é exclusivo na matriz.

Já que os pontos ganhos para o primeiro, segundo e terceiro lugares seguem um padrão consistente, é possível usar a seguinte declaração única para calcular os pontos para chegadas ao pódio do racer1: calculando com base no valor armazenado para o valor do índice à esquerda:

case condition: ifThenElse if: {arrayL-IndexRacer1} < 3 then: (3 - {arrayL-IndexRacer1}) * 10 else: 0 as: 'ptsRacer1'

A transformação a seguir edita ptsRacer1 para avaliar as condições "Não terminou" e de último lugar:

set col: ptsRacer1 value: IF(ISNULL({arrayL-IndexRacer1}), -20, ptsRacer1))

É possível usar o seguinte comando para determinar se o piloto especificado foi o último no evento:

set col: ptsRacer1 value: IF(arrR-IndexRacer1 == countRacers, -10, ptsRacer1)


Resultados:

RaceIdRaceResultscountRacersarrR-IndexRacer1arrL-IndexRacer1ptsRacer1
1["racer3", "racer5", "racer2", "racer1", "racer6"]5330
2["racer6", "racer4", "racer2", "racer1", "racer3", "racer5"]6330
3["racer4", "racer3", "racer5", "racer2", "racer6", "racer1"]655-10
4["racer1", "racer2", "racer3", "racer5"]40020
5["racer5", "racer2", "racer4", "racer6", "racer3"]5nulonulo-20


Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Google Cloud Dataprep
Precisa de ajuda? Acesse nossa página de suporte.