2016-09-05 3 views

답변

2

더 직접적인 버전으로 기록 할 수있는 주시기 바랍니다 같은 결과가 있어야한다. 누적기로지도를 사용하여 목록을 접습니다. withDefaultValue은 이미 맵에 항목이 있는지 테스트 할 필요가 없음을 의미합니다.

val xs = List(('a',3),('b',3),('a',1)) 

xs.foldLeft(Map[Char, Int]() withDefaultValue 0) 
      {case (m, (c, i)) => m updated (c,m(c)+i)} 

//> res0: scala.collection.immutable.Map[Char,Int] = Map(a -> 4, b -> 3) 
+0

한 가지 질문 : 코드를 워크 시트에 직접 복사 할 때 작동하지만 목록 작성시 ('' ', 3), ('b ', 3), ('a ', 1) (c, m (c) + i)}'foldLeft (Map [Char, Int]()와 DefaultValue 0) {case (m, (c, i) updated' : 기호를 해결할 수 없습니다. List (......)와 foldLeft (.......) 사이에'. '을 넣었을 때 괜찮습니다.하지만 컴파일러가 없으면 컴파일러에 문제가 있습니다. –

+0

우선 순위 문제입니다. '(list foldleft Map ...) 주위의 괄호들도 그것을 고쳐줍니다. –

1
list.groupBy(_._1).mapValues(_.map(_._2).sum) 

list.groupBy(_._1).mapValues { tuples => 
    val ints = tuples.map { case (c, i) => i } 
    ints.sum 
} 
+0

이 할 수있는 가장 간단한 방법은 아마이지만, 외부'Lists'의 무리를 만들뿐만 아니라 금액을 얻기 위해 각 키와 관련된 값을 통해 추가 반복을 필요로 할 것이다. –

+0

@ JasonLenderman 당신은 무엇을 제안합니까? '보기'? 나도 배우고있어. –

+0

''.view'를'list'에 추가하면 같은 출력을 만들어 내고 가볍다 고 생각되는 과정에서'SeqView *'를 생성합니다. –