[SCALA] 스칼라 : 목록에 튜플 요소를 변환하는 방법
SCALA스칼라 : 목록에 튜플 요소를 변환하는 방법
내가 튜플의 다음과 같은 목록이 있다고 가정 해 봅시다 :
val tuples = listOfStrings.map(string => {
val split = string.split(":")
(split(0), split(1), split(2))
})
나는 다른 목록 등의 목록에서 분할 (0), 분할 (1)을 좀하고 싶습니다. 이 얻을 수있는 간단한 방법은 서면입니다 :
list1 = tuples.map(x => x._1).toList
list2 = tuples.map(x => x._2).toList
list3 = tuples.map(x => x._3).toList
3 개 계산서를 작성하지 않고도 위를 달성하는 더 우아한 (기능) 방법이 있습니까?
해결법
-
==============================
1.이 목록의 목록으로 당신에게 결과를 줄 것이다 :
이 목록의 목록으로 당신에게 결과를 줄 것이다 :
tuples.map{t => List(t._1, t._2, t._3)}.transpose
로컬 변수에 저장하고 싶다면, 바로 수행
val List(l1,l2,l3) = tuples.map{t => List(t._1, t._2, t._3)}.transpose
UPDATE : 바와 같이 Blaisorblade에 의해 지적, 표준 라이브러리는 실제로가 내장되어 이에 대한 방법 : 그냥 압축 해제처럼 대신 쌍 트리플위한 unzip3 :
val (l1, l2, l3) = tuples.unzip3
말할 필요도없이, 위 내 손으로 압연 솔루션을 통해이 방법을 선호한다 (그러나 인수에 대응> 3의 튜플을이 아직도 여전히 적용됩니다).
-
==============================
2.당신은 압축 해제합니다 :
당신은 압축 해제합니다 :
scala> val (numbers, homonyms) = List(("one", "won"), ("two", "too")).unzip numbers: List[java.lang.String] = List(one, two) homonyms: List[java.lang.String] = List(won, too)
-
==============================
3.당신이 뭔가를 원한다면 임의의 튜플 크기에 사용할 수 :
당신이 뭔가를 원한다면 임의의 튜플 크기에 사용할 수 :
val tupleSize = 3 0.until(tupleSize).toList .map(x => (_:Product).productElement(x).asInstanceOf[String]) .map(tuples.map(_))
대신 배열의 목록이 있다면 분명히, 이것은 더 우아하게 표현 될 수있다.
-
==============================
4.당신은 한 줄의 문장을 작성할 수 있습니다.
당신은 한 줄의 문장을 작성할 수 있습니다.
처럼
(list1, list2, list3) = tuples.foldRight((List[String](), List[String](), List[String]()))( (a,b) => (a._1 :: b._1, a._2 :: b._2, a._3 :: b._3 ) )
-
==============================
5.나는 우아한 모르는 그러나 당신은 튜플을 저장하는 중간 단계없이 한 줄에 그것을 할 수 있습니다. 아마도 그것은 읽기 조금 어렵다 ...
나는 우아한 모르는 그러나 당신은 튜플을 저장하는 중간 단계없이 한 줄에 그것을 할 수 있습니다. 아마도 그것은 읽기 조금 어렵다 ...
(for(split <- listOfStrings.map(_.split(":"))) yield List(split(0), split(1), split(2))).transpose
REPL 예 :
scala> listOfStrings res1: List[java.lang.String] = List(a:b:c, d:e:f, g:h:i) scala> (for(split <- listOfStrings.map(_.split(":"))) | yield List(split(0), split(1), split(2))).transpose res2: List[List[java.lang.String]] = List(List(a, d, g), List(b, e, h), List(c, f, i))
from https://stackoverflow.com/questions/12392409/scala-how-to-convert-tuple-elements-to-lists by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 등 구현 ifTrue, ifFalse, ifSome, ifNone은 피하는 경우 (...) 단순 패턴 매칭 (0) | 2019.11.29 |
---|---|
[SCALA] "합니다 MyType"문제 :해야합니까 실제 클래스를 반환하는 스칼라에서 추상적 인 유형 (또는 제네릭)를 사용해야? (0) | 2019.11.28 |
[SCALA] 엉성한 부산물 패턴 매칭 (0) | 2019.11.28 |
[SCALA] 스칼라에서 어떻게 SQL SUM 및 GROUP BY에 해당 할 수 있습니까? (0) | 2019.11.28 |
[SCALA] 놀이! 프레임 워크 : 템플릿에 변수를 정의? [복제] (0) | 2019.11.28 |