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";1
5))
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