4D v16.3

Find in sorted array

Página Inicial

 
4D v16.3
Find in sorted array

Find in sorted array 


 

Find in sorted array ( array ; valor ; > or < {; posPrim {; posUlt}} ) -> Resultado 
Parâmetro Tipo   Descrição
array  Array in Array para pesquisar
valor  Expression in Valor do mesmo tipo para procurar no array
> or <  Operador in > se o array está classificado em ordem crescente, < se ele está em ordem decrescente
posPrim  Inteiro longo in Posição da sua primeira ocorrência se o valor for encontrado; caso contrário, a posição em que o valor deve ser inserido
posUlt  Inteiro longo in Posição de sua última ocorrência se o valor for encontrado; caso contrário, mesmo que posPrim
Resultado  Booleano in True se pelo menos um elemento no array corresponde ao valor, False caso contrário

Tema: Arrays

O novo comando Find in sorted array devolve true se pelo menos um elemento no array ordenado com o valor e opcionalmente devolve a posição dos elementos correspondentes. Diferente de Find in array, Find in sorted array só funciona com um array ordenado e oferece informação sobre a posição das ocorrências, o que lhe permite inserir elementos se for necessário.

O array deve estar já ordenado e deve coincidir com a ordem específica pelo parâmetro > ou < (ou seja, o símbolo "maior que" para a ordem ascendente e o símbolo "menor que" para a ordem descendente). O comando Find in sorted array tomará vantagem da ordem e uso de um algoritmo de ´pesquisa binária, que é bem mais eficiente para grandes arrays (para mais informação, consulte a página algoritmo de pesquisa binária em Wikipédia). No entanto, se o array não está ordenado corretamente, o resultado pode ser incorreto.

O comando ignorará a indicação de ordem se comporta como um Find in array (pesquisa sequencial, devolvendo -1 para posPrim e posUlt se não se encontra o valor) em qualquer dos seguintes casos:

  • se o tipo de array não pode ordenar (por exemplo arrays ponteiro),
  • se o array é de tipo booleano (não preciso),
  • se a base de dados não é Unicode (modo compatibilidade) e o array é uma cadeia ou array texto,
  • quando é procurado em um array text para uma cadeia que inclui um coringa ('@') no começo ou no meio da cadeia (utilizando uma pesquisa binária com um caractere coringa não é possível porque os elementos correspondentes podem não ser contínuos no array).

Em caso de que o comando devolva False, o valor devolvido em posPrim pode ser passado a INSERT IN ARRAY para inserir o valor no array mantendo o array ordenado. Esta sequencia é mais rápida que a inserção de um novo elemento ao final do array e logo chamar a SORT ARRAY para mover ele ao lugar correto.
    
O valor devolvido em postUlt pode ser combinado com o valor devolvido em posPrim para realizar sobre cada elemento do array que coincida com o valor (sob um For...End for) ou para encontrar o número total de ocorrências (como o encontraria Count in array porém mais rápido).

Você deseja inserir um valor, se for necessário, mantendo o array ordenado:

 C_LONGINT($pos)
 If(Find in sorted array($array ;$value ;>;$pos)
    ALERT("Found at pos "+String($pos))
 Else
    INSERT IN ARRAY($array ;$pos)
    $array{$pos}:=$value
 End if


Você quer encontrar o número de ocorrências das cadeias que começam por "test" e criar uma cadeia que vincula todos estes elementos:

 C_LONGINT($posFirst ;$posLast)
 C_TEXT($output)
 If(Find in sorted array($array ;"test@";>;$posFirst ;$posLast))
    $output:="Found "+String($posLast-$posFirst+1)+" results :\n"
 End if
 For($i ;$posFirst ;$posLast)
    $output:=$output+$array{$i}+"\n"
 End for



Ver também 

Count in array
Find in array
SORT ARRAY

 
PROPRIEDADES 

Produto: 4D
Tema: Arrays
Número 1333

This command can be run in preemptive processes

 
HISTÓRIA 

Criado por: 4D v14 R4

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)