4 formas diferentes de encontrar elementos en una colección

Traducido automáticamente de Deepl

Como desarrollador, a menudo necesita saber si un elemento especificado ya existe en una colección, o encontrar todos los elementos que corresponden a criterios particulares. Los métodos de colección de 4D ofrecen muchas formas diferentes de buscar elementos específicos.

Este artículo es parte de una serie que demuestra cómo manipular colecciones con los métodos añadidos en 4D v16 R6. Para aprender aún más, descargue nuestra demo de base de datos, que incluye 12 ejemplos diferentes para mostrar todo lo que puede hacer con los métodos de colección.

Ejemplo de base de datos: Gestionar colecciones

¿Cómo encontrar elementos en una colección?

Ahora, veamos las diferentes formas que ofrece 4D para encontrar elementos en una colección. En primer lugar, empezamos construyendo una colección de la siguiente manera:

$col:=New collection(New object("Ciudad"; "París"; "Tiempo";1))
$col .push(New object("Ciudad"; "Nueva York"; "Tiempo";-10))
$col .push(New object("Ciudad"; "Tokio"; "Tiempo";-5))
$col .push(New object("Ciudad"; "Miami"; "Tiempo";15))

Utilice los métodos «some» o «every».

Para determinar si al menos un valor de tu colección es mayor que 0, puedes utilizar el some método:

$b:=$col.some("TiempoMayorQue0") // true

donde WeatherGreaterThan0 es un método del proyecto, utilizado como un call back, como sigue

$1.result:=$1.value.Weather>0

Ahora, si quieres saber si todos los elementos de tu colección coinciden con un test personalizado, sólo tienes que utilizar every:

$b:=$col.every("WeatherGreaterThan0") // false

Tenga en cuenta que el mismo método de devolución de llamada también podría utilizarse para muchos otros casos, como una especie de método genérico.

filtrar una colección

Puede filtrar una colección en función de los resultados de un método de llamada con el método filter método.

De la misma manera que en los ejemplos anteriores, si quieres crear una colección con todos los valores mayores que 0 a partir de otra colección

$colNew:=$col.filter("WeatherGreaterThan0")
// [{Ciudad:París,Weather:1},{Ciudad:Miami,Weather:15}]

encontrar el primer elemento que coincida con un criterio

Si busca el primer elemento de una colección que coincida con un método de proyecto especificado, sólo tiene que utilizar find como método de devolución de llamada:

$o:=$col.find("TiempoMayorQue0") // {Ciudad:París, Tiempo:1}

Del mismo modo, si está buscando el índice y no el elemento en sí, utilice findIndex:

$index:=$col .findIndex("WeatherGreaterThan0")
// $i=0 (primer índice de la colección)

Obtener el índice de un elemento buscado

Por último, puede utilizar los métodos indexOf y lastIndexOf para buscar una expresión entre los elementos de la colección y devolver el índice de la primera / última ocurrencia encontrada:

$col2:=New collection(1;2; "Henry"; "Albert"; "Henry";6;4; "Henry";5)
$i :=$col2.indexOf("Henry") //$i=2 index of the first occurrence
$i :=$col2.lastIndexOf("Henry")
//$i=7 index of the last occurrence

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se unió al equipo de 4D Program en noviembre de 2016. Como Product Owner, está a cargo de escribir las historias de usuario y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la característica entregada cumple con las necesidades del cliente. Después de obtener una licenciatura en Ciencias de la Computación en el CNAM, Fabrice se unió a una pequeña empresa de publicación de software como desarrollador Windev. A continuación, trabajó para diferentes empresas del sector industrial y comercial como desarrollador de Windev y de la web, así como asesor técnico de nuevas funcionalidades.