MULTI SORT ARRAY

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 2004 (Modificado)


MULTI SORT ARRAY (Array{; orden}{; Array2; orden2; ...; ArrayN; ordenN})

ParámetroTipoDescripción
ArrayArrayArray(s) a ordenar
orden> o <> efectuar una ordenación creciente o
< efectuar una ordenación decreciente
Si se omite = no ordenación

MULTI SORT ARRAY(ptrArrayNombre; sortArrayNombre)

ParámetroTipoDescripción
ptrArrayNombreArray punteroArray de punteros de Array
ordenArrayNombreArray entero largoArray de criterio de ordenación (1 = ordenación         creciente, -1 = ordenación decreciente,
0 =sincronización con ordenaciones anteriores)

Descripción

El comando MULTI SORT ARRAY le permite efectuar una ordenación multicriterios en un conjunto de arrays. Esta función es particularmente útil en el contexto de áreas de desplazamiento agrupadas en formularios.

Este comando admite dos sintaxis diferentes.

Primera sintaxis: MULTI SORT ARRAY(Array{; orden}{; array2; sort2; ...; arrayN; ordenN})

Esta sintaxis es la más sencilla; le permite pasar directamente los nombres de los arrays sincronizados a donde usted quiere aplicar una ordenación multicriterio.

Puede pasar un número ilimitado de parejas (Array;> o <) y/o sólo arrays. Todos los arrays pasados como parámetros se ordenan en de una manera sincronizada.

Puede pasar array de cualquier tipo excepto arrays tipo puntero o imagen. Puede ordenar un elemento de un array bidimensional (es decir a2DArray{$vlEsteElemento}), pero no puede ordenar el array bidimensional en si mismo (es decir a2DArray).

Para utilizar los contenidos de un array como criterio de ordenación, pase el parámetro orden. El valor del parámetro (> o <) determina el orden (creciente o decreciente) en el cual el array será ordenado. Si se omite el parámetro orden, el contenido del array no se utiliza como criterio de ordenación.

Nota: recuerde que debe pasarse al menos un criterio de ordenación para que el comando funcione. Si no se define un criterio de ordenación, se genera un error.

Los niveles de ordenación se determinan por el orden en el cual los arrays se pasan al comando: la posición de un array con criterio de ordenación en la sintaxis determina su nivel de ordenación.

Segunda sintaxis: MULTI SORT ARRAY (ptrArrayNombre; ordenArrayNombre)

Esta sintaxis, más compleja, es muy valiosa para los desarrollos genéricos (por ejemplo, usted puede crear un método genérico para ordenar arrays de todo tipo, o una vez más crear el equivalente de un comando SORT ARRAY genérico).

El parámetro ptrArrayNombre contiene el nombre de un array de punteros de array; cada elemento de este array es un puntero designando un array a ordenar. Las ordenaciones serán efectuadas en el orden de los punteros de array definidos por ptrArrayNombre. Advertencia: todos los arrays apuntados por ptrArrayNombre deben tener el mismo número de elementos.

Nota: ptrArrayNombre puede ser un array de punteros local ($ptrArrayNombre), proceso (ptrArrayNombre) o interproceso (<>ptrArrayNombre). En cambio, los elementos de este array deben apuntar a arrays de proceso o interproceso únicamente.

El parámetro ordenArrayNombre contiene el nombre de un array en el cual cada elemento indica el criterio de ordenación (-1, 0 o 1) del elemento del array de punteros correspondiente:

-1 = Ordenación decreciente.

0 = El array no se utiliza como criterio de ordenación pero debe ser ordenado en función de otras ordenaciones.

1 = Ordenación creciente.

Nota: no es posible ordenar arrays de tipo Puntero o Imagen. Puede ordenar un elemento de un array de bidimensional (es decir a2DArray{$vlEsteElemento}), pero no puede ordenar el array bidimensional en sí mismo (es decir a2DArray).

Para cada elemento del array ptrArrayNombre, debe corresponder un elemento del array ordenArrayNombre. Los dos arrays deben por lo tanto tener exactamente el mismo número de elementos.

Ejemplos

1. El siguiente ejemplo utiliza la primera sintaxis: crea cuatro arrays y los ordena por ciudad (orden ascendente) luego por salario (orden descendente) con los dos últimos arrays nombres_array y telNum_array, siendo sincronizados de acuerdo con los criterios de ordenación anteriores:

   ALL RECORDS([Empleados])
   SELECTION TO ARRAY([Empleados]Ciudad;ciudades;[Empleados]Salario;salarios;[Empleados]Nombre;
                                          nombres;[Empleados]TelNum;telNums)
   MULTI SORT ARRAY (ciudades;>;salarios;<;nombres;telNums)

Si quiere que el array de nombres sea utilizado como tercer criterio de ordenación, sólo añada > o < después del parámetro nombres_array.

Observe que la sintaxis:

   MULTI SORT ARRAY (ciudades;>;salarios;nombres;telNums)

es equivalente a:

   SORT ARRAY(ciudades;salarios;nombres;telNums;>)

2. El siguiente ejemplo utiliza la segunda sintaxis: crea cuatro arrays y los ordena por ciudad (orden creciente) y empresa (orden decreciente); los últimos dos arrays, nombres_Array y telNum_Array, están sincronizados de acuerdo al criterio de ordenación anterior:

   ALL RECORDS([Empleados])
   SELECTION TO ARRAY([Empleados]Ciudad;ciudades;[Empleados]Empresa;empresas;[Empleados]Nombre;
                                          nombres;[Empleados]TelNum;telNums)
   ARRAY POINTER(punteros_Array;4)
   ARRAY LONGINT(sorts_Array;4)
   Array_punteros{1}:=->ciudades
   Array_orden{1}:=1
   Array_punteros{2}:=->empresas
   Array_orden{2}:=-1
   Array_punteros{3}:=->nombres
   Array_orden{3}:=0
   Array_punteros{4}:=->telNums
   Array_orden{4}:=0
   MULTI SORT ARRAY (Array_punteros;Array_orden)

Si quiere que el array de nombres se utilice como tercer criterio de ordenación, debe asignar el valor 1 al elemento Array_orden{3}. O bien, si quiere que los arrays se ordenen sólo por el criterio ciudades, asigne el valor 0 a los elementos Array_orden{2}, Array_orden{3} y Array_orden{4}. De esta manera, puede obtener un resultado idéntico a SORT ARRAY(ciudades;empresas;nombres;telNums;>).

Ver también

ORDER BY, SELECTION TO ARRAY, SORT ARRAY.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente