Sincronizar varias colecciones con esta nueva función

Traducido automáticamente de Deepl

4D ofrece potentes funciones para trabajar con colecciones de objetos. Por ejemplo, puede crear una colección de ciudades con sus países y continentes asociados. Manipular estas colecciones con funciones incorporadas como ordenar, clasificar y filtrar se convierte en un juego de niños.

4D v20 R3 introduce la nueva función multiSort() para simplificar este proceso. Con esta función, ahora puede ordenar y sincronizar fácilmente múltiples colecciones.

Nueva función

Esta nueva función multiSort() le permite realizar una ordenación sincronizada multinivel en un conjunto de colecciones.

Si se llama a la función sin parámetros, ésta tiene el mismo efecto que la función .sort(). La colección se ordena (sólo valores escalares) por defecto en orden ascendente, según su tipo.

Si desea ordenar las colecciones en otro orden que no sea ascendente, debe proporcionar una fórmula.

$col.multiSort( [ $col2; $col3 ] )
$col .multiSort( $formula; [$col2; $col3] )

También es posible definir una ordenación sincronizada de varios niveles. Esto es similar al comando SORT MULTIPLE ARRAY.

En este caso, es necesario pasar un objeto que contenga atributos de colección y orden.

$col.multiSort( [ {collection: $col2; order: ck ascending} ; $col3 ] )
$col .multiSort( [ $formula; {collection: $col2; order: ck ascending} ; $col3 ] )

Además, se dice que el algoritmo de ordenación es estable, es decir, que dos elementos con el mismo valor aparecen en el mismo orden en la salida ordenada que en el conjunto de datos de entrada.

Ejemplo de base de datos

Ejemplos

Volvamos a nuestro ejemplo de ciudad, país y continente:

var $city : Collection
var $country : Collection
var $continent : Collection

$city :=["París"; "Lyon"; "Rabat"; "Eching"; "San Diego"]
$country :=["Francia"; "Francia"; "Marruecos"; "Alemania"; "EE.UU."]
$continent :=["Europa"; "Europa"; "África"; "Europa"; "América"]

Ejemplo 1: Ordenación simple de la primera colección ($continent) con sincronización de las otras colecciones ($country y $city)

$continent.multiSort([$country; $city])

El resultado es:

"África"; "América"; "Europa"; "EE. 
"Morocco"; "US"; "France"; "France"; "Germany" 
"Rabat"; "San Diego"; "París"; "Lyon"; "Eching"

Ejemplo 2: Ordenación ascendente de la primera y tercera colecciones ($continent y $city), y sincronización para la segunda colección ($country)

$continent.multiSort($country; {collection: $city; order: ck ascending})

El resultado es:

"África"; "América"; "Europa"; "EE.
"Morocco"; "US"; "Germany"; "France"; "France"
"Rabat"; "San Diego"; "Eching"; "Lyon"; "París"

Ejemplo 3: Ordenación por fórmula de la primera colección ($continent) y sincronización para las otras colecciones ($country y $city)

La fórmula del ejemplo es sencilla y permite ordenar en orden descendente. Pero seguro que tienes muchas ideas para fórmulas más complejas que se adapten a tus necesidades.

$continent.multiSort(Formula($1.value>$1.value2); [$country; $city])

El resultado es:

"Europa"; "Europa"; "Europa"; "América"; "África"
"Francia"; "France"; "Alemania"; "EE.UU."; "Marruecos"; "France"; "Germany"; "US"; "Morocco".
"París"; "Lyon"; "Eching"; "San Diego"; "Rabat"

Ejemplo 4: Con colecciones complejas

También se puede utilizar para sincronizar colecciones de objetos.


var $name : : :=[] . ({ : "John"; : "Smith"}) . ({ : "Alain"; : "Martin"}) . ({ : "Jane"; : "Doe"}) . ({ : "John"; : "Doe"}) :=[] .({ : "Paris"; : "France"}) . ({ : "Lyon"; : "France"}) . ({ : "Eching"; : "Germany"}) . ({ : "Berlin"; : "Germany"}) . ( ( . . < . . ); [ ) Collection
var $address Collection
$name
$namepushfirstname lastname
$namepushfirstname lastname
$namepushfirstname lastname
$namepushfirstname lastname
$address
$addresspushcity country
$addresspushcity country
$addresspushcity country
$addresspushcity country

$namemultiSortFormula$1valuefirstname$1value2firstname$address]

El resultado es:

"Alain Martin"; "Jane Doe"; "John Smith"; "John Doe"
"Lyon Francia"; "Eching Alemania"; "París Francia"; "Berlín Alemania" 

Siguiente…

Para más información, consulte la documentación. Puede compartir sus comentarios y casos de uso en el foro.

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.