웹사이트 검색

스칼라 슬라이스 함수


오늘은 스칼라 슬라이스 함수에 대해 알아보겠습니다.

스칼라 슬라이스

Scala 슬라이스 기능은 다음 API 클래스에서 사용할 수 있습니다.

  • 스칼라 배열 API
  • 문자열 API
  • 스칼라 컬렉션 API

각 API를 선택하고 다음 섹션에서 적합한 예제와 함께 심층적으로 논의할 것입니다.

Scala 슬라이스 함수 사용법

  def slice(from-index: Int, until-index: Int): ScalaAPIClass[A]

여기서 "ScalaAPIClass\는 Scala 컬렉션 클래스(Seq, List 등과 같은 인덱스 기반 액세스를 지원함), 문자열, 배열 클래스를 의미합니다. 예:- 다음 함수는 Scala API의 Seq 클래스에 정의되어 있습니다.

  def slice(from-index: Int, until-index: Int): Seq[A]

슬라이스 함수 매개변수: "슬라이스\ 함수 매개변수의 사용법은 다음 표에 설명되어 있습니다.

S.No. Function Params Usage
1. First Parameter Starting index (Inclusive). It should be zero or any any positive integer less than the length of the Collection or String or Array.
2. Second Parameter Ending index (Exclusive).

슬라이스 함수는 'first-index'(포함)부터 'until-index'(제외)까지 요소를 추출합니다. 여기에서 숫자 배열에 대한 요소 번호, 문자열에 대한 문자, 컬렉션에 대한 객체입니다.

스칼라 어레이 슬라이스

Scala API에서 Array 클래스는 슬라이스 기능을 다음과 같이 정의합니다.

def slice(from: Int, until: Int): Array[T]

여기서 'from'은 Array의 시작 인덱스(Inclusive)이고 'until'은 Array의 종료 인덱스(Exclusive)입니다. 배열 슬라이스 함수 예:

scala> val marksArray = Array(56,79,60,99,71)
marksArray: Array[Int] = Array(56, 79, 60, 99, 71)

5개의 값을 가진 Array의 Int가 생성되어 인덱스 시작 값은 0이고 인덱스 끝 값은 4입니다. 길이 = 5입니다. 이제 슬라이스 함수를 가지고 놀아봅시다.

scala> marksArray.slice(0,2)
res0: Array[Int] = Array(56, 79)

첫 번째 요소인 0 인덱스로 시작하여 2가 인덱스 = 1을 의미할 때까지 모든 요소를 검색하므로 여기에서 0번째 요소와 1번째 요소를 얻었습니다.

scala> marksArray.slice(3,4)
res1: Array[Int] = Array(99)

모든 인덱스 범위로 액세스할 수 있습니다.

scala> marksArray.slice(3,3)
res2: Array[Int] = Array()

위와 같이 start 및 end에 동일한 값을 제공하면 빈 배열이 생성됩니다. 이유는 무엇입니까? 시작 인덱스 = 3 끝 인덱스 = 3 - 1 = 2 배열에서 3개에서 2개 인덱스까지 요소 집합을 검색하는 것은 불가능합니다.

scala> marksArray.slice(-1,3)
res3: Array[Int] = Array(56, 79, 60)

-ve 값을 주면 위와 같이 사용 가능한 인덱스로 시작합니다.

scala> marksArray.slice(0,5)

res4: Array[Int] = Array(56, 79, 60, 99, 71)

위와 같이 사용 가능한 인덱스를 넘어 두 번째 매개 변수 값을 지정하면(marksArray의 사용 가능한 최대 인덱스 값은 길이 = 5이므로 4입니다) 해당 값을 무시하고 사용 가능한 인덱스까지만 반환합니다. 참고:- Java와 달리 ArrayIndexOutOfBoundsException을 발생시키지 않습니다.

스칼라 컬렉션 슬라이스

Scala의 표준 API에서 대부분의 클래스는 인덱스 기반 요소 액세스를 지원하는 이 슬라이스 함수를 정의합니다. 예를 들어 List 클래스는 이 함수를 아래와 같이 정의합니다.

def slice(from: Int, until: Int): List[A]

목록 조각 함수 예제:- Array 예제와 동일하며 모든 Collection API에 대해 동일한 결과를 얻습니다.

scala> val list = List(56, 79, 60, 99, 71)
list: List[Int] = List(56, 79, 60, 99, 71)

scala> list.slice(0,2)
res5: List[Int] = List(56, 79)

scala> list.slice(3,4)
res6: List[Int] = List(99)

scala> list.slice(3,3)
res7: List[Int] = List()

scala> list.slice(-1,3)
res8: List[Int] = List(56, 79, 60)

scala> list.slice(0,5)
res9: List[Int] = List(56, 79, 60, 99, 71)

빈 목록에 액세스하면 아래와 같이 빈 목록만 얻습니다.

scala> val list2 = List()
list2: List[Nothing] = List()

scala> list2.slice(0,1)

res10: List[Nothing] = List()

스칼라 스트링 슬라이스

Scala API에서 "StringOps\ 클래스는 scala.collection.immutable 패키지에 정의되어 있습니다. 아래와 같이 슬라이스 기능을 정의합니다.

def slice(from: Int, until: Int): String

참고:- Scala에서는 Java의 String 클래스를 사용합니다. 그러나이 클래스에는 슬라이스 기능이 없습니다. Java의 String 객체에 대해 슬라이스 함수를 사용할 때 Scala Compiler는 내부적으로 이 String 객체를 StringOps 클래스 객체로 변환하여 이 슬라이스 함수를 사용합니다. (슬라이스 함수 뿐만 아니라 더 많은 정보가 있습니다. 자세한 내용은 Scala API를 참조하십시오.) 즉 "StringOps\는 String 클래스의 암시적 클래스입니다. String 슬라이스의 함수 예제:-

scala> val str = "Hello I'm doing good. How are you?"
str: String = Hello I'm doing good. How are you?

scala> str.slice(6,9)

res8: String = I'm

아시다시피 문자열 인덱스는 0부터 시작합니다. 여기에서 from-index = 6은 until-index = 9를 의미합니다(배타적이므로 index = 8까지만 고려해야 합니다).

scala> str.substring(6,9)
res12: String = I'm

여기서 str.slice(6,9)와 str.substring(6,9)은 모두 같은 값을 반환합니다. 슬라이스 Vs 하위 문자열 String 클래스의 슬라이스와 하위 문자열 함수의 차이점

  • 기능 및 구문 측면에는 차이가 없습니다.
  • 성능은 거의 비슷하고 무시할 수 있습니다.

참고:- 스칼라에서는 아래와 같이 배열 요소처럼 문자열 문자에 액세스할 수 있습니다.

scala> str(0)
res0: Char = H

여기서는 Char를 반환하지만 String은 반환하지 않습니다.

scala> str(-1)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
  at java.lang.String.charAt(String.java:658)
  at scala.collection.immutable.StringOps$.apply$extension(StringOps.scala:38)
  ... 33 elided

scala> str.length
res2: Int = 34

scala> str(34)
java.lang.StringIndexOutOfBoundsException: String index out of range: 34
  at java.lang.String.charAt(String.java:658)
  at scala.collection.immutable.StringOps$.apply$extension(StringOps.scala:38)

  ... 33 elided

참고:- 범위를 벗어난 문자열 문자에 액세스하려고 하면 위와 같이 StringIndexOutOfBoundsException이 발생합니다. String의 문자 액세스는 Char를 반환하고 하위 문자열 및 슬라이스 함수는 아래와 같이 String을 반환합니다.

scala> str(0)
res4: Char = H

scala> str.substring(0,1)
res5: String = H

scala> str.slice(0,1)
res6: String = H

"Scala의 슬라이스 함수\ 사용에 대한 모든 것입니다. 다음 게시물에서 더 많은 Scala 개념에 대해 논의할 것입니다. 참조: Scala API Doc