String Scala:如何计算某个索引中唯一项的出现次数?

String Scala:如何计算某个索引中唯一项的出现次数?,string,list,scala,loops,String,List,Scala,Loops,我有一个列表,其格式如下所示: List(List(21, Georgetown, Male),List(29, Medford, Male),List(18, Manchester, Male),List(27, Georgetown, Female)) 我需要计算每个唯一城镇名称的出现次数,然后返回城镇名称及其计数次数。但我只想返回发生最多的一个城镇。因此,如果我将函数应用于上面的列表,我将得到 (Georgetown, 2) 我来自Java,所以我知道如何以更长的方式完成这个过程,但我

我有一个列表,其格式如下所示:

List(List(21, Georgetown, Male),List(29, Medford, Male),List(18, Manchester, Male),List(27, Georgetown, Female))
我需要计算每个唯一城镇名称的出现次数,然后返回城镇名称及其计数次数。但我只想返回发生最多的一个城镇。因此,如果我将函数应用于上面的列表,我将得到

(Georgetown, 2)

我来自Java,所以我知道如何以更长的方式完成这个过程,但我想利用Scala的一些内置方法

这是一个非常奇怪的结构,但一种方法是:

  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)

修好了。我的意思是嵌套列表。@ChrisMartin需要镇上最流行的唯一事件,以及事件的计数。如果出现最大值的平局,结果会是什么呢?
List[List[Any]]
会造成非常糟糕的数据模型,特别是对于Scala。如果有一个类来表示元素,那就更好了<代码>案例类人员(年龄:整数,城市:字符串,性别:字符串)。这将导致
列出[人员]
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)