Comment puis-je utiliser la carte et recevez un index ainsi en Scala?
Est-il de la Liste/Séquence intégrée qui se comporte comme map
et fournit l'élément de l'index ainsi?
Vous devez vous connecter pour publier un commentaire.
Est-il de la Liste/Séquence intégrée qui se comporte comme map
et fournit l'élément de l'index ainsi?
Vous devez vous connecter pour publier un commentaire.
Je crois que vous êtes à la recherche pour zipWithIndex?
À partir de: http://www.artima.com/forums/flat.jsp?forum=283&thread=243570
Vous avez aussi des variantes comme:
ou:
zipWithIndex
méthode pour obtenir l'index à l'intérieur d'une boucle/map/whatever.while
boucle, ce qui est probablement parmi les plus rapides des options.view
vous devriez être en mesure d'empêcher la création et traversant une Liste complémentaire.iterator
, les vues sont sur le point de sortir.Utilisation .carte dans .zipWithIndex
Résultat:
map
comme demandé, au lieu de juste l'impression à l'intérieur d'unforeach
.Les solutions proposées souffrent du fait qu'ils créent intermédiaire de collections ou d'introduire des variables qui ne sont pas strictement nécessaires. Pour en fin de compte tout ce que vous devez faire est de garder une trace du nombre d'étapes d'une itération. Cela peut être fait en utilisant memoizing. Le code résultant peut ressembler à
La
doIndexed
Fonction des enveloppements à l'intérieur d'une fonction qui reçoit un indice d'un des éléments demyIterable
. Cela pourrait vous être familière à partir de JavaScript.Ici est une façon d'atteindre ce but. Envisager l'utilitaire suivant:
C'est déjà tout ce que vous devez. Vous pouvez appliquer la présente par exemple comme suit:
qui résultats dans la liste
De cette façon, vous pouvez utiliser l'habituel Traversable-fonctions au détriment de l'emballage de votre fonction. La surcharge est la création de la memoizing objet et le compteur qui y sont. Sinon, cette solution est aussi bon (ou mauvais) en termes de mémoire ou la performance à l'aide de indexée
map
. Profitez-en!coll.view.zipWithIndex
au lieu decoll.zipWithIndex
Il est
CountedIterator
en 2.7.x (que vous pouvez obtenir à partir d'un itérateur .comptés). Je crois qu'il a été déprécié (ou tout simplement supprimé) en 2.8, mais il est assez facile de rouler votre propre. Vous avez besoin d'être en mesure de nommer l'itérateur:Ou, en supposant que votre collection est la constante de temps d'accès, vous pouvez mapper la liste des index à la place de la collection:
ls.indices.map(i => doStuffWithElem(i, ls(i))
indices
est mis en œuvre comme0 until length
c'est à peu près la même chose 😛List
était en effet pauvres. Je n'en dit cependant que c'est adapté si votre collection est la constante de temps d'accès. Doivent avoir sélectionnéArray
.Utilisation .carte dans .zipWithIndex avec la Carte la structure de données
Résultats
Si vous avez besoin de recherche sur la carte des valeurs (comme je l'ai eu à):