Scala Language
튜플
수색…
비고
튜플의 길이가 23 인 이유는 무엇입니까?
튜플은 컴파일러에 의해 객체로 재 작성됩니다. 컴파일러는 Tuple1
에서 Tuple22
액세스 할 수 있습니다. 이 임의의 한도는 언어 설계자가 결정했습니다.
왜 튜플의 길이는 0부터 시작합니까?
Tuple0
은 Unit
와 동일합니다.
새 튜플 만들기
튜플은 2에서 22 개의 값을 가진 이기종 컬렉션입니다. 튜플은 괄호를 사용하여 정의 할 수 있습니다. 크기가 2
튜플 ( 'pair'라고도 함)에는 화살표 구문이 있습니다.
scala> val x = (1, "hello") x: (Int, String) = (1,hello) scala> val y = 2 -> "world" y: (Int, String) = (2,world) scala> val z = 3 → "foo" //example of using U+2192 RIGHTWARD ARROW z: (Int, String) = (3,foo)
x
는 크기가 2 인 튜플입니다. 튜플 사용의 요소에 액세스하려면 ._1
통해, ._22
. 예를 들어, x._1
을 사용하여 x
튜플의 첫 번째 요소에 액세스 할 수 있습니다. x._2
는 두 번째 요소에 액세스합니다. 더 우아하게, 튜플 추출기를 사용할 수 있습니다 .
크기가 2 인 튜플을 생성하기위한 화살표 구문은 기본적으로 (key -> value)
쌍의 컬렉션 인 Maps에서 사용됩니다.
scala> val m = Map[Int, String](2 -> "world") m: scala.collection.immutable.Map[Int,String] = Map(2 -> world) scala> m + x res0: scala.collection.immutable.Map[Int,String] = Map(2 -> world, 1 -> hello) scala> (m + x).toList res1: List[(Int, String)] = List((2,world), (1,hello))
지도의 쌍에 대한 구문은 화살표 구문으로, 1이 키이고 a가 해당 키와 연결된 값이라는 것을 명확히 보여줍니다.
컬렉션 내의 튜플
튜플은 종종 컬렉션 내에서 사용되지만 특정 방식으로 처리되어야합니다. 예를 들어 다음과 같은 튜플 목록이 있습니다.
scala> val l = List(1 -> 2, 2 -> 3, 3 -> 4)
l: List[(Int, Int)] = List((1,2), (2,3), (3,4))
암시 적 튜플 - 언 패킹을 사용하여 요소를 함께 추가하는 것이 자연스럽게 보일 수 있습니다.
scala> l.map((e1: Int, e2: Int) => e1 + e2)
그러나 다음과 같은 오류가 발생합니다.
<console>:9: error: type mismatch;
found : (Int, Int) => Int
required: ((Int, Int)) => ?
l.map((e1: Int, e2: Int) => e1 + e2)
스칼라는이 방식으로 튜플을 암시 적으로 압축 해제 할 수 없다. 이지도를 수정하기위한 두 가지 옵션이 있습니다. 첫 번째는 위치 접근 자 _1
및 _2
를 사용하는 것입니다.
scala> l.map(e => e._1 + e._2)
res1: List[Int] = List(3, 5, 7)
또 다른 옵션은 case
문을 사용하여 패턴 일치를 사용하여 튜플을 언팩하는 것입니다.
scala> l.map{ case (e1: Int, e2: Int) => e1 + e2}
res2: List[Int] = List(3, 5, 7)
이러한 제한은 튜플 콜렉션에 적용된 모든 고차 함수에 적용됩니다.