Quelle est la différence entre la taille et la longueur d'un Seq? Quand utiliser l'un et quand l'autre?
scala> var a :Seq[String] = Seq("one", "two")
a: Seq[String] = List(one, two)
scala> a.size
res6: Int = 2
scala> a.length
res7: Int = 2
C'est le même?
Merci
Rien. Dans le Seq doc , à la méthode de taille, il est clairement indiqué: "La taille de cette séquence, équivalente à length
.".
size
est défini dans GenTraversableOnce
, tandis que length
est défini dans GenSeqLike
, donc length
n'existe que pour Seq
s, tandis que size
existe pour tous les Traversable
s. Pour Seq
s, cependant, comme cela a déjà été souligné, size
délègue simplement à length
(ce qui signifie probablement que, après l'inlining, vous obtiendrez un bytecode identique).
Rien, l'un délègue à l'autre. Voir trait SeqLike.
/** The size of this $coll, equivalent to `length`.
*
* $willNotTerminateInf
*/
override def size = length
Dans un Seq, ils sont les mêmes, comme d'autres l'ont mentionné. Cependant, pour information, c'est ce qu'IntelliJ met en garde sur un scala.Array
:
Remplacez .size par .length sur les tableaux et les chaînes
Informations sur l'inspection: cette inspection signale les appels array.size et string.size. Bien que de tels appels soient légitimes, ils nécessitent une conversion implicite supplémentaire vers SeqLike. Un cas d'utilisation courant serait d'appeler la longueur sur des tableaux et des chaînes peuvent fournir des avantages significatifs.
J'ai fait une expérience, en utilisant Scala version 2.12.8, et une liste d'un million d'articles. Lors de la première utilisation, length () est 7 ou 8 fois plus rapide que size (). Mais le 2 essayez sur la même liste, size () est à peu près la même vitesse que length ().
Cependant, après un certain temps, le cache a probablement disparu, size () est à nouveau lent () de 7 ou 8 fois.
Cela montre que la longueur () est préférée pour les séquences. Ce n'est pas juste un autre nom pour size ().