Scala - Seq的大小和长度有什么区别?

时间:2014-04-09 15:07:09

标签: scala scala-2.10 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

它是一样的吗?

由于

5 个答案:

答案 0 :(得分:53)

sizeGenTraversableOnce中定义,而lengthGenSeqLike中定义,因此length仅适用于Seq s,而size所有Traversable都存在{1}}。但是,对于Seq,正如已经指出的那样,size只是委托给length(这可能意味着,在内联之后,你将得到相同的字节码)。

答案 1 :(得分:52)

无。在Seq doc中,在尺寸方法中明确指出:"此序列的大小,相当于length。"。

答案 2 :(得分:8)

没有,一个代表另一个。见SeqLike特质。

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

答案 3 :(得分:1)

在Seq中,它们与其他人提到的相同。但是,有关信息,这是IntelliJ在scala.Array上警告的内容:

  

在数组和字符串上用.length替换.size

     

检查信息:这里   检查报告array.size和string.size调用。虽然这样的电话   是合法的,它们需要额外的隐式转换为   SeqLike一样。一个常见的用例是调用length   数组和字符串可能会提供明显的优势。

答案 4 :(得分:1)

我使用Scala 2.12.8版和一百万个项目列表进行了实验。首次使用时,length()比size()快7或8倍。但是在第二次尝试相同的列表时,size()与length()的速度大致相同。

但是,过了一段时间,大概是缓存消失了,size()再次慢了7到8倍。

这表明length()是序列的首选。它不仅仅是size()的别称。