나는 쌍 목록을 가지고 :리스트 [(Char, Int)]를 스칼라의 [Char, Int] 맵으로 합계하는 법?
List(('a',3),('b',3),('a',1))
을 나는 _1에 의해 그룹화 및 _2를 합산하여 그것을 변환하고 싶습니다.
Map('a'->4, 'b' -> 3)
나는 아주 새로운 스칼라에 너무 친절 :)
나는 쌍 목록을 가지고 :리스트 [(Char, Int)]를 스칼라의 [Char, Int] 맵으로 합계하는 법?
List(('a',3),('b',3),('a',1))
을 나는 _1에 의해 그룹화 및 _2를 합산하여 그것을 변환하고 싶습니다.
Map('a'->4, 'b' -> 3)
나는 아주 새로운 스칼라에 너무 친절 :)
더 직접적인 버전으로 기록 할 수있는 주시기 바랍니다 같은 결과가 있어야한다. 누적기로지도를 사용하여 목록을 접습니다. 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)
list.groupBy(_._1).mapValues(_.map(_._2).sum)
list.groupBy(_._1).mapValues { tuples =>
val ints = tuples.map { case (c, i) => i }
ints.sum
}
이 할 수있는 가장 간단한 방법은 아마이지만, 외부'Lists'의 무리를 만들뿐만 아니라 금액을 얻기 위해 각 키와 관련된 값을 통해 추가 반복을 필요로 할 것이다. –
@ JasonLenderman 당신은 무엇을 제안합니까? '보기'? 나도 배우고있어. –
''.view'를'list'에 추가하면 같은 출력을 만들어 내고 가볍다 고 생각되는 과정에서'SeqView *'를 생성합니다. –
한 가지 질문 : 코드를 워크 시트에 직접 복사 할 때 작동하지만 목록 작성시 ('' ', 3), ('b ', 3), ('a ', 1) (c, m (c) + i)}'foldLeft (Map [Char, Int]()와 DefaultValue 0) {case (m, (c, i) updated' : 기호를 해결할 수 없습니다. List (......)와 foldLeft (.......) 사이에'. '을 넣었을 때 괜찮습니다.하지만 컴파일러가 없으면 컴파일러에 문제가 있습니다. –
우선 순위 문제입니다. '(list foldleft Map ...) 주위의 괄호들도 그것을 고쳐줍니다. –