indexOf() sur une collection d'objets

Je recherche le numéro de l’élément de la collection répondant à un critère donné ; indexOf() paraît fait pour ça ; on le cite dans le fil https://forums.4d.com/Post/EN/28866321/1/28866322#28866322.

Mais il s’agit de collection simple.
Pour une collection d’objets, je n’arrive pas à le faire fonctionner ; le query fonctionne.

Exemple
<code 4D>
C_COLLECTION($Personnes)
C_OBJECT($Personne)
$Personnes:=New collection
$Personne:=New object
$Personne.ID:=1
$Personne.Name:=“Dupont”
$Personnes:=$Personnes.push($Personne)
$Personne:=New object
$Personne.ID:=2
$Personne.Name:=“Martin”
$Personnes:=$Personnes.push($Personne)

$i:=$Personnes.indexOf(“Name= :1”;“Dupont”)
$i:=$Personnes.indexOf(“ID= :1”;2)

</code 4D>
Les deux dernières lignes ne fonctionnent pas.
Erreur de ma part ou feature request à faire ?

<code 4D>
$i:=$Personnes.extract(“Name”).indexOf(“Dupont”)
$i:=$Personnes.extract(“ID”).indexOf(2)
</code 4D>

Bonsoir Vincent

par rapport à une syntaxe du genre :

<code 4D>
$i:=$Personnes.Name.indexOf(“Dupont”)
</code 4D>

quelle est le gain ou la différence ?

Bonjour,

Essaie avec ‘indices’, il me semble que ça correspond plus à ce que tu cherches (ou query si tu veux une autre collection en résultat)

Merci Vincent, ça marche !

Mais ce serait plus compréhensible et homogène que la syntaxe que j’ai essayée soit implémentée.

C’est aussi l’occasion de poser la question “Pourquoi a-t-on choisi de mettre des indices à la mode informatique, càd commençant par 0 ?”
Pour faire comme tout le monde ?
On est obligé selon le contexte de raisonner comme une machine (collections et entités) ou comme un être humain (tableaux et listboxes).
Pas terrible…
Qu’en pensez-vous ?

C’est bien l’indice que je veux.
La solution de Vincent me donne directement la valeur cherchée ; à moi de m’assurer que le processus donne une valeur unique.

Ta solution me donne une erreur.
$Personnes.Name est indéfinie

Merci à tous pour les réponses.

Salut,

Désolé. J’avais pas fais attention que Personnes était une collection d’objet.
J’utilise cette syntaxe pour une collection de collection dans un cas particulier.

Patrick