program story

Scala-Seq의 크기와 길이의 차이점은 무엇입니까?

inputbox 2020. 12. 11. 08:07
반응형

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

그것은 동일합니다?

감사


아무것도. 에서 서열의 문서 , 크기 방법에 명확하게 기술되었는지 "에 해당이 순서의 크기를 length.".


size는에 정의되어있는 GenTraversableOnce반면는 length에 정의되어 GenSeqLike있으므로 s에 length대해서만 존재하고 모든에 대해 존재합니다 . 대한 의, 그러나 이미 지적했다 단순히 위임 (아마를 의미하는 인라인 후, 당신은 동일한 바이트 코드를 얻을 것이다).SeqsizeTraversableSeqsizelength


아무것도, 한 사람이 다른 사람에게 위임합니다. 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과 백만 개의 항목 목록을 사용하여 실험을했습니다. 처음 사용할 때 length ()는 size ()보다 7 ~ 8 배 빠릅니다. 그러나 같은 목록에 대한 두 번째 시도에서 size ()는 length ()와 거의 같은 속도입니다.

그러나 얼마 후 캐시가 사라지고 size ()는 다시 7 ~ 8 배 느려집니다.

이것은 length ()가 시퀀스에 선호된다는 것을 보여줍니다. size ()의 또 다른 이름이 아닙니다.

참고 URL : https://stackoverflow.com/questions/22966705/scala-what-is-the-difference-between-size-and-length-of-a-seq

반응형