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
それは同じだ?
ありがとう
なし。 Seq doc では、sizeメソッドで、「このシーケンスのサイズ、length
と同等」と明記されています。
size
はGenTraversableOnce
で定義されていますが、length
はGenSeqLike
で定義されているため、length
はSeq
sに対してのみ存在し、一方、size
はすべてのTraversable
sに存在します。ただし、Seq
sについては、既に指摘したように、size
はlength
に委任するだけです(インライン化すると、同じバイトコードが取得されることを意味します)。
何も、一方が他方に委任します。 SeqLike特性を参照してください。
/** The size of this $coll, equivalent to `length`.
*
* $willNotTerminateInf
*/
override def size = length
他の人が述べたように、Seqではそれらは同じです。ただし、情報については、IntelliJがscala.Array
:
配列と文字列の.sizeを.lengthに置き換えます
検査情報:この検査は、array.sizeおよびstring.sizeの呼び出しを報告します。このような呼び出しは正当ですが、追加のSeqLikeへの暗黙的な変換が必要です。一般的な使用例は配列の長さを呼び出すことであり、文字列は大きな利点を提供します。
Scalaバージョン2.12.8、および100万のアイテムリストを使用して実験を行いました。最初の使用時には、length()はsize()の7または8倍高速です。しかし、同じリストで試してください。size()はlength()とほぼ同じ速度です。
ただし、しばらくすると、おそらくキャッシュがなくなったため、size()が再び7または8倍遅くなります。
これは、length()がシーケンスに適していることを示しています。 size()の単なる名前ではありません。