Gli sviluppatori hanno spesso bisogno di sapere se un elemento specifico esiste già in una collezione o di trovare tutti gli elementi corrispondenti a criteri particolari. I metodi di raccolta 4D offrono molti modi diversi per cercare elementi specifici.
Questo articolo fa parte di una serie di dimostrazioni su come manipolare le raccolte con i metodi aggiunti in 4D v16 R6. Per saperne di più, scaricate la nostra demo del database, che comprende 12 esempi diversi per mostrare tutto ciò che si può fare con i metodi di raccolta!
Esempio di database: Gestire le raccolte
Come trovare gli elementi di una collezione?
Vediamo ora i diversi modi che 4D offre per trovare gli elementi di una collezione. Per prima cosa, iniziamo a costruire una collezione come segue:
$col:=New collection(New object("Città"; "Parigi"; "Tempo";1))
$col .push(New object("Città"; "New-York"; "Tempo";-10))
$col .push(New object("Città"; "Tokyo"; "Tempo";-5))
$col .push(New object("Città"; "Miami"; "Tempo";15))
Utilizzare i metodi “some” o “every
Per determinare se almeno un valore dell’insieme è maggiore di 0, è possibile utilizzare il metodo some :
$b:=$col.some("WeatherGreaterThan0") // vero
dove WeatherGreaterThan0 è un metodo di progetto, usato come richiamo, come segue:
$1.result:=$1.value.Weather>0
Ora, se si vuole sapere se tutti gli elementi dell’insieme corrispondono a un test personalizzato, è sufficiente utilizzare il metodo every:
$b:=$col.every("WeatherGreaterThan0") // false
Si noti che lo stesso metodo di callback potrebbe essere utilizzato anche per molti altri casi, come una sorta di metodo generico.
filtrare un insieme
È possibile filtrare un insieme in base ai risultati di un metodo di richiamo con il metodo filter metodo.
Allo stesso modo degli esempi precedenti, se si vuole creare un insieme con tutti i valori maggiori di 0 da un altro insieme:
$colNew:=$col.filter("WeatherGreaterThan0")
// [{City:Paris,Weather:1},{City:Miami,Weather:15}]
trovare il primo elemento che corrisponde a un criterio
Se si cerca il primo elemento di un insieme che corrisponda a un metodo di progetto specificato, basta usare find come metodo di richiamo:
$o:=$col.find("WeatherGreaterThan0") // {City:Paris,Weather:1}
Allo stesso modo, se si cerca l’indice e non l’elemento stesso, usare findIndex:
$index:=$
col .findIndex("WeatherGreaterThan0")
// $i=0 (primo indice della collezione)
Ottenere l’indice di un elemento cercato
Infine, è possibile utilizzare i metodi indexOf e lastIndexOf per cercare un’espressione tra gli elementi dell’insieme e restituire l’indice della prima/ultima occorrenza trovata:
$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