| 4D v20.1Find in sorted array | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v20.1
 Find in sorted array 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Find in sorted array ( array ; valor ; > or < {; posPrim {; posUlt}} ) -> Resultado | ||||||||
| Parâmetro | Tipo | Descrição | ||||||
| array | Array |   | Array para pesquisar | |||||
| valor | Expression |   | Valor do mesmo tipo para procurar no array | |||||
| > or < | Operador |   | > se o array está classificado em ordem crescente, < se ele está em ordem decrescente | |||||
| posPrim | Inteiro longo |   | 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 |   | Posição de sua última ocorrência se o valor for encontrado; caso contrário, mesmo que posPrim | |||||
| Resultado | Booleano |   | 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:
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 ARRAY TO LIST) 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
	Produto: 4D
	Tema: Arrays
	Número 
        1333
        
        
        
	
	Criado por: 4D v14 R4
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	Manual de linguagem 4D ( 4D v20)
	
	
	Manual de linguagem 4D ( 4D v20.1)
	
	
	
 Adicionar um comentário
Adicionar um comentário