4 modi diversi per trovare gli elementi di una collezione

Tradotto automaticamente da Deepl

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

Fabrice Mainguené
- Product Owner -Fabrice Mainguené si è unito al team di 4D Program nel novembre 2016. In qualità di Product Owner, è incaricato di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Dopo aver conseguito una laurea in Informatica presso il CNAM, Fabrice è entrato a far parte di una piccola società di pubblicazione di software come sviluppatore Windev. In seguito ha lavorato per diverse aziende del settore industriale e commerciale come sviluppatore Windev e web e come consulente tecnico su nuove funzionalità.