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
대해서만 존재하고 모든에 대해 존재합니다 . 대한 의, 그러나 이미 지적했다 단순히 위임 (아마를 의미하는 인라인 후, 당신은 동일한 바이트 코드를 얻을 것이다).Seq
size
Traversable
Seq
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과 백만 개의 항목 목록을 사용하여 실험을했습니다. 처음 사용할 때 length ()는 size ()보다 7 ~ 8 배 빠릅니다. 그러나 같은 목록에 대한 두 번째 시도에서 size ()는 length ()와 거의 같은 속도입니다.
그러나 얼마 후 캐시가 사라지고 size ()는 다시 7 ~ 8 배 느려집니다.
이것은 length ()가 시퀀스에 선호된다는 것을 보여줍니다. size ()의 또 다른 이름이 아닙니다.
'program story' 카테고리의 다른 글
SSL 연결을 설정할 수 없습니다. SSL 인증서를 수정하려면 어떻게해야합니까? (0) | 2020.12.11 |
---|---|
.vagrant 파일을 삭제할 때 VM을 어떻게 파괴합니까? (0) | 2020.12.11 |
OkHttp / Retrofit으로 HTTP 요청을 재 시도하는 방법은 무엇입니까? (0) | 2020.12.11 |
Elixir의 두 항목 튜플 목록에서 맵을 만드는 방법 (0) | 2020.12.11 |
D3 4.0 rangeRoundBands 동등? (0) | 2020.12.11 |