Bonjour,
je n'utilise pas Perl régulièrement, et ça se sent quand j'en ai besoin.
Mon problème est simple, et la solution doit l'être tout autant. Mais...
Je dispose d'une liste de chaîne de caractères de la forme suivante : id;nombre , id;nombre ...
Le ; vient de la concaténation que j'ai fait des éléments avant de les mettre dans la liste, mais peu importe. Cela sera plus clair dans un tableau :
id1 3.2 id1 12.7 id1 2 id2 1.2 id2 6.5 id3 7.8 id3 0.5 id4 15.6 id1 1.5 id1 9.3
L'idée est la suivante, je voudrais, pour chaque groupe d'id identique, ne conserver que la plus haute valeur.
Sachant qu'il y a plusieurs groupe d'id au nom similaire (ici id1), je veux conserver la plus haute valeur de chacun de ces groupes de même nom.
Cela donnerai :
id1 12.7 id2 6.5 id3 7.8 id4 15.6 id1 9.3
Pour ce qui est de récupérer le maximum, la fonction max du package List::Util fait très bien l'affaire.
Ok, je viens de me rendre compte que sous la forme id;nombre la fonction max ne fait que me renvoyer le dernier élément de la liste, mais dans le sens nombre;id, il renvoie bien la plus haute valeur. Soit.
Le fait est que je ne vois pas bien comment isoler chaque groupe pour récupérer le maximum à chaque fois.
Je me prend la tête avec des boucles, mais comment conserver la valeur de l'itération précédente ?
En fait, cette liste est créée en extrayant deux éléments de chaque ligne d'un csv. Je suppose que le filtre pourrait se faire à ce niveau, mais ça ne change pas le problème de la valeur de l'itération précédente.
Bref, je patauge. Si vous avez une idée, ou un bout de piste, je suis preneur !
Merci !
Partager