aScan
Busca um elemento num array. Retorna a posicao (base 1) ou 0 se nao encontrar. Aceita bloco de codigo pra busca complexa.
Assinatura: aScan(aArray, xBusca | bCondicao) -> nPos
Retorna: Numeric
aScan tem duas formas: busca simples por igualdade ou busca com bloco de codigo (mais flexivel — padrao em arrays multidimensionais).
Sintaxe
nPos := aScan(aArray, xValor) // busca direta
nPos := aScan(aArray, {|x| condicao(x)}) // busca com blocoExemplo
aLista := {"A", "B", "C", "D"}
nPos := aScan(aLista, "C") // 3 (base 1)
// Array multidimensional — busca por bloco:
aProdutos := { ;
{"P01", "Caneta", 3.50}, ;
{"P02", "Borracha", 1.20}, ;
{"P03", "Lapis", 2.00} ;
}
nPos := aScan(aProdutos, {|x| x[1] == "P02"}) // 2
// Verificar antes de acessar:
If (nPos := aScan(aLista, cValor)) > 0
cAchei := aLista[nPos]
EndIfPegadinhas
- Retorna 0 se nao achou — sempre verificar antes de acessar com
aLista[nPos] - Bloco com == case-sensitive. Pra ignorar caso:
{|x| Upper(x) == Upper(cBusca)} - Performance: aScan e O(n). Pra arrays grandes (10k+), considere converter pra hash via
HBHash
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
aArray | Array | sim | Array onde buscar |
xBusca | Any | CodeBlock | sim | Valor a buscar OU bloco de codigo {|x| condicao} |
Exemplos
Busca com bloco em array 2D
nPos := aScan(aItens, {|x| x[1] == cCodProcurado})