Comment puis-je trouver l'indice de la valeur maximale dans une Liste Scala?
Pour un Scala List[Int] je peux appeler la méthode max pour trouver le maximum de la valeur de l'élément.
Comment puis-je trouver l'index de l'élément maximum?
C'est ce que je fais maintenant:
val max = list.max
val index = list.indexOf(max)
- sonne comme un étrange cas d'utilisation. peut-être que l'utilisation besoin d'une triés structure de données?
- Oui, vous avez un point sur l'étrange cas, vous pourriez dire que c'est "l'odeur de code" comme le max aurait pu être trouvé lors de la génération de la liste de la première place. Pas assez d'espace pour aller dans pourquoi elle semble mal ici, dans ce petit espace, je vais peut-être mettre à jour la réponse plus tard.
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est de zip la liste avec ses indices, trouver la paire avec le plus grand premier élément, et le retour le deuxième élément de la paire:
Ce n'est pas le moyen le plus efficace pour résoudre le problème, mais il est idiomatiques et clair.
x.zipWithIndex.maxBy{ case (i,v) => v }._2
Depuis
Seq
est une fonction de la Scala, le code suivant fonctionne:Scala 2.13
, une version de la manipulation vide listes pourrait être:list.indices.maxByOption(list)
même plus facile à lire serait:
Dans le cas où il y a plusieurs maximums, elle renvoie le premier indice.
Avantages:Vous pouvez l'utiliser avec plusieurs types, il passe par la liste qu'une seule fois, vous pouvez fournir un index par défaut au lieu de se faire exception pour vider les listes.
Inconvénients:Peut-être vous préférez des exceptions 🙂 Pas un one-liner.
Pimp ma bibliothèque! 🙂
Plus de détails à propos de ce modèle ici: http://www.artima.com/weblogs/viewpost.jsp?thread=179766