2016-02-07 39 views
2

我有一個格式化像下面的列表清單:Scala:如何統計特定索引中唯一項目的出現次數?

List(List(21, Georgetown, Male),List(29, Medford, Male),List(18, Manchester, Male),List(27, Georgetown, Female)) 

,我需要計算每一個獨特的小鎮名字的出現,然後返回城鎮名稱,它被計數的時間量。但我只想回到那個出現最多的城鎮。所以,如果我申請的功能,上面的列表中,我會得到

(Georgetown, 2) 

我從Java來了,所以我知道如何在一個較長的方式做到這一點的過程,但我想利用一些Scala的建在方法中。

+0

固定它。我的意思是讓列表嵌套。 – Colby

+0

@ChrisMartin需要該鎮最受歡迎的獨特事件,並計算事件的發生次數。 – Colby

+0

如果最大限度地打平,結果應該如何? –

回答

3
scala> val towns = List(
    |  List(21, "Georgetown", "Male"), 
    |  List(29, "Medford", "Male"), 
    |  List(18, "Manchester", "Male"), 
    |  List(27, "Georgetown", "Female")) 
towns: List[List[Any]] = ... 

scala> towns.map({ case List(a, b, c) => (b, c) }).groupBy(_._1).mapValues(_.length).maxBy(_._2) 
res0: (Any, Int) = (Georgetown,2) 
2

這是一個很奇怪的結構,而是一種方式做到這一點是有:

val items : List[List[Any]] = List(
    List(List(21, "Georgetown", "Male")), 
    List(List(29, "Medford", "Male")), 
    List(List(18, "Manchester", "Male")), 
    List(List(27, "Georgetown", "Female"))).map(_.flatten) 

    val results = items.foldLeft(Map[String,Int]()) { 
    (acc,item) => 
     val key = item(1).asInstanceOf[String] 
     val count = acc.getOrElse(key, 0) 
     acc + (key -> (count + 1)) 
    } 

    println(results) 

主要生產:

Map(Georgetown -> 2, Medford -> 1, Manchester -> 1) 
相關問題