2017-09-11 1 views
2

이것은 내 첫 번째 게시물입니다. 아래 그림과 같이 스플라인 세트를 사용하여 튜플을지도로 변환하고 싶습니다.튜플을 스칼라 세트를 사용하여지도로 변환하는 방법

Set((1,"a"),(2,"b"),(1,"c")) 

Map(1 -> Set("a","c"), 2 -> Set("b")) 

그것을 간단하게 할 수있는 방법이 있나요?

누락 된 정보가있는 경우 알려 주시기 바랍니다.

답변

3

스칼라 컬렉션 라이브러리의 모든 메소드를 확인하는 것이 좋습니다.이 메소드는 꽤 광범위하며 대개 이처럼 모든 일반적인 경우를 다루고 있습니다. 여기

은 당신이 그것을 할 방법 :

Set((1,"a"),(2,"b"),(1,"c")) 
    .groupBy(_._1).mapValues(_.map(_._2)) 

결과 :

res0: Map[Int,Set[String]] = Map(2 -> Set(b), 1 -> Set(a, c)) 

UPD : @OlegPyzhcov가 지적한 바와 같이, mapValues이 값은 원래지도의 게으른 뷰를 작성 모든 접근시 재평가. 작성 후에 map에 반복적으로 액세스하면 비효율적 일 수 있습니다. 이 문제를 해결하려면 결국지도를 구체화해야 할 수 있습니다. 나는 그것을 할 수있는 간단한 방법은 다음과 생각 : 간단/더 효율적인 방법이 있는지

.mapValues(_.map(_._2)).map(identity) 

@OlegPyzhcov이 날 수정하시기 바랍니다.

+0

대단히 감사합니다! 스칼라 컬렉션 라이브러리를 읽으려고합니다. – mattsu

+1

'mapValues'는 게으르므로 모든 요소 액세스, 인쇄 등에서 새로운 세트를 생성합니다. –

+0

@OlegPyzhcov 이것을 지적 해 주셔서 감사합니다. 당신은 결코 학습을 멈추지 않을 것입니다. – Aivean

관련 문제