2 votes

Scala : comment copier une partie d'une liste vers une autre liste

Je suis novice en Scala.

J'ai une liste origList = Liste[Double] avec des milliers d'éléments. J'ai besoin de créer une autre liste outList = List[Double] et y copier les éléments de origList avec les indices start, start+1, ..., start+nCopy-1 c'est-à-dire que la liste de sortie aura nCopy éléments.

Cette partie du code sera exécutée plusieurs fois. Quelle est la manière la plus efficace de le faire en Scala ?

3voto

Dima Points 7274

La façon dont les gens le font habituellement en scala est la suivante list.slice(start, start+nCopy) .

Notez, que List en scala est no un conteneur à accès aléatoire comme ArrayList est en java. Il est implémenté comme une liste chaînée, donc, en particulier, si vous allez le faire plusieurs fois, cela vous aidera de manière significative, si vous convertissez votre liste en quelque chose d'indexé à l'avance : val converted = list.toIndexedSeq ou, mieux, val converted = list.toArray .

.slice sur un Array ou sur IndexedSeq sera beaucoup plus efficace, surtout si start est élevé.

Maintenant, si vous êtes vraiment Pour ce qui est de l'efficacité de cette opération, rien ne vaut (malheureusement) la bonne vieille approche java :

val converted = list.toArray
val copied = java.util.Arrays.copyOfRange(converted, start, start+nCopy)

Cela peut être ordres de grandeur plus vite que converted.slice (laisser seul list.slice ) lors de la copie d'un nombre suffisamment grand (centaines) d'éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X