web-dev-qa-db-fra.com

Scala - Quelle est la différence entre la taille et la longueur d'un Seq?

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

56
YoBre

Rien. Dans le Seq doc , à la méthode de taille, il est clairement indiqué: "La taille de cette séquence, équivalente à length.".

54
Peter

size est défini dans GenTraversableOnce, tandis que length est défini dans GenSeqLike, donc length n'existe que pour Seqs, tandis que size existe pour tous les Traversables. Pour Seqs, 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).

54
Jörg W Mittag

Rien, l'un délègue à l'autre. Voir trait SeqLike.

  /** The size of this $coll, equivalent to `length`.
   *
   *  $willNotTerminateInf
   */
  override def size = length
8
monkjack

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.

4
Mark Tickner

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 ().

1
user11595225