web-dev-qa-db-ja.com

Scala-Seqのサイズと長さの違いは何ですか?

Seqのサイズと長さの違いは何ですか?いつ、もう一方を使用しますか?

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

それは同じだ?

ありがとう

56
YoBre

なし。 Seq doc では、sizeメソッドで、「このシーケンスのサイズ、lengthと同等」と明記されています。

54
Peter

sizeGenTraversableOnceで定義されていますが、lengthGenSeqLikeで定義されているため、lengthSeqsに対してのみ存在し、一方、sizeはすべてのTraversablesに存在します。ただし、Seqsについては、既に指摘したように、sizelengthに委任するだけです(インライン化すると、同じバイトコードが取得されることを意味します)。

54
Jörg W Mittag

何も、一方が他方に委任します。 SeqLike特性を参照してください。

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

他の人が述べたように、Seqではそれらは同じです。ただし、情報については、IntelliJがscala.Array

配列と文字列の.sizeを.lengthに置き換えます

検査情報:この検査は、array.sizeおよびstring.sizeの呼び出しを報告します。このような呼び出しは正当ですが、追加のSeqLikeへの暗黙的な変換が必要です。一般的な使用例は配列の長さを呼び出すことであり、文字列は大きな利点を提供します。

4
Mark Tickner

Scalaバージョン2.12.8、および100万のアイテムリストを使用して実験を行いました。最初の使用時には、length()はsize()の7または8倍高速です。しかし、同じリストで試してください。size()はlength()とほぼ同じ速度です。

ただし、しばらくすると、おそらくキャッシュがなくなったため、size()が再び7または8倍遅くなります。

これは、length()がシーケンスに適していることを示しています。 size()の単なる名前ではありません。

1
user11595225