2014-02-24 2 views
4

목록에서 값의 발생의 최대 수를 찾을 수 스칼라 컬렉션 기능이 있는가,목록의 모드 값을 찾는 방법은 무엇입니까?

, 나는 내가 이것을 계산하는 모듈을 작성할 수 있습니다

L = List("A","B","B","E","B","E","B","B","C","E","B") 

output: "B". 

목록을 가지고 말할 수 있습니다하지만, 나는 이것을 수행하기 위해 scala "way"또는 scala collection 함수가 이미 있어야한다고 생각합니다. 감사!

내가 할 수있는 준비가 만든 방법을 알고하지 않습니다,하지만 내가 어떻게 할 것입니다
+0

합니다. 새로운 질문을 하시겠습니까? – joescii

+0

아니요, 답변을 얻었습니다. :) 그러나 목록의 모드를 검색 할 때 어떤 결과도 찾을 수 없었지만 발생 횟수에 대한 결과가있었습니다. 나는 모두가 "StatSpeak"모드를 이해하지 못한다고 생각했기 때문에 더 나은 가시성을 얻으려고 변했다. 괜찮 으면 좋겠다. 그렇지 않으면 되돌릴 수 있습니다. – Learner

+0

오, 알았어요. 그것은 당신의 질문입니다. :)하지만 "모드"는 괜찮다고 생각합니다. 매우 정확합니다. 질문을 읽는 방법은 이제 솔루션의'groupBy' 부분 만 원한다는 것을 암시합니다. 궁금한 점은 MAX의 출현 횟수를 가진 요소를 찾는데 아무 것도 제안하지 않는다는 것입니다. – joescii

답변

5

:

l.groupBy(i => i).mapValues(_.size).maxBy(_._2)._1 

아,하지만 모드이고이 경우를 처리하지 않습니다 독특한 것은 아닙니다!

+0

작은 수정으로 모든 모드가 생성됩니다. 'val grouped = L.groupBy (x => x) .mapValues ​​(_. 크기) ','val modeValue = grouped.maxBy (_._ 2) ._2'그리고'val modes = grouped.filter (_._ 2 == modeValue) .map (_._ 1)'. –

0

이 당신에게 모드를 제공합니다 : 당신이 완전히 목록에서 값의 발생 횟수에 대한 질문에, 모드에 대한 질문에서 질문을 변경 나타납니다

import scala.collection.breakOut 
import scala.collection.generic.CanBuildFrom 
def mode 
    [T, CC[X] <: Seq[X]](coll: CC[T]) 
    (implicit o: T => Ordered[T], cbf: CanBuildFrom[Nothing, T, CC[T]]) 
    : CC[T] = { 
    val grouped = coll.groupBy(x => x).mapValues(_.size).toSeq 
    val max = grouped.map(_._2).max 
    grouped.filter(_._2 == max).map(_._1)(breakOut) 
} 
관련 문제