4D v16.3

Find in sorted array

Inicio

 
4D v16.3
Find in sorted array

Find in sorted array 


 

Find in sorted array ( array ; valor ; > or < {; posPrim {; posUlt}} ) -> Resultado 
Parámetro Tipo   Descripción
array  Array in Array a buscar
valor  Expresión in Valor del mismo tipo a buscar en el array
> or <  Operador in > si el array está en orden ascendente, < si el está en orden descendente
posPrim  Entero largo in Posición de su primera aparición si se encuentra el valor; de lo contrario la posición donde debe insertarse el valor
posUlt  Entero largo in Posición de su última ocurrencia si se encuentra el valor; de lo contrario lo mismo que posPrim
Resultado  Booleano in True si al menos un elemento en el array corresponde al valor, de lo contrario False

Tema: Arrays

El nuevo comando Find in sorted array devuelve true si al menos un elemento en el array ordenado con el valor y opcionalmente devuelve la posición de los elementos correspondientes. A diferencia de Find in array, Find in sorted array sólo funciona con un array ordenado y ofrece información sobre la posición de las ocurrencias, lo que le permite insertar elementos si es necesario.

El array debe estar ya ordenado y debe coincidir con el orden especificado por el parámetro > or < (es decir, el símbolo "mayor que" para el orden ascendente y el símbolo "menor que" para el orden descendente). El comando Find in sorted array tomará ventaja de la ordenación y uso de un algoritmo de búsqueda binaria, que es mucho más eficiente para grandes arrays (para más información, consulte la página algoritmo de búsqueda binaria en Wikipedia). Sin embargo, si el array no está ordenado correctamente, el resultado puede ser incorrecto.

El comando ignorará la indicación de ordenación y se comporta como un Find in array estándar (búsqueda secuencial, devolviendo -1 para posPrim y posUlt si no se encuentra el valor) en cualquiera de los siguientes casos:

  • si el tipo de array no se puede ordenar (por ejemplo arrays puntero),
  • si el array es de tipo booleano (no preciso),
  • si la base de datos no es Unicode (modo compatibilidad) y el array es una cadena o array texto,
  • cuando se busca en un array text para una cadena que incluye un comodín ('@') al principio o en el medio de la cadena (utilizando una búsqueda binaria con un carácter comodín no es posible porque los elementos correspondientes pueden no ser contiguos en el array).

En caso de que el comando devuelva False, el valor devuelto en posPrim se puede pasar a INSERT IN ARRAY para insertar el valoren el array manteniendo el array ordenado. Esta secuencia es más rápida que la inserción de un nuevo elemento al final del array y luego llamar a SORT ARRAY para moverlo al lugar correcto.
    
El valor devuelto en posUlt se puede utilizar en conjunto con el valor devuelto en posPrim para iterar sobre cada elemento del array correspondiente al valor (vía un For...End for) o para encontrar el número total de ocurrencias (como lo encontraría Count in array, pero más rápido).

Usted desea insertar un valor, si es necesario, manteniendo el 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


Usted quiere encontrar el número de ocurrencias de las cadenas que comienzan por "test" y crear una cadena que concatena todos estos 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 también 

Count in array
Find in array
SORT ARRAY

 
PROPIEDADES 

Producto: 4D
Tema: Arrays
Número 1333

This command can be run in preemptive processes

 
HISTORIA 

Creado por: 4D v14 R4

 
ARTICLE USAGE

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