scala - 如何递归获取 Scala map 中包含的每个列表的最后一个元素?

我是 Scala 的新手,想知道如何递归地从 map 中包含的每个列表中获取最后一个元素。 map 中包含的数据是从一个文本文件中读取的,该文件包含有关过去 5 个赛季的足球队及其积分统计的信息:

   Manchester United, 72, 86, 83, 90, 94
   Manchester City, 80, 84, 91, 77, 88
   Chelsea, 76, 85, 92, 87, 84
   Arsenal, 70, 79, 81, 76, 83
   Liverpool, 69, 77, 80, 73, 79

数据存储为 Map[String, List[Int]],我希望返回一个 Map[String, Int] 类型的 map ,它将为我提供每个团队的最新积分统计,例如Manchester United:94,Manchester City:88 等。我目前正在设法通过反转列表并获得头部来实现这一点,如下所示。我将如何递归执行此操作?

  val teamdata = readTextFile("teams.txt")

  def menuOptionOne(): Boolean = {
    //1 - Show most recent points tally for each team
    menuMostRecent(mostRecentPoints)
    true
  }


  def readTextFile(file: String): Map[String, List[Int]] = {
    var mapBuilder: Map[String, List[Int]] = Map()
    try {
      for (line <- Source.fromFile(file).getLines()) {     
      val linesplit = line.split(",").map(_.trim).toList   
      mapBuilder = mapBuilder ++ Map(linesplit.head -> linesplit.tail.map(_.toInt))
      }
    } 
    catch {
      case ex: Exception => println("Exception Thrown")
    }
    mapBuilder
  }


  def menuMostRecent(f: () => Map[String, Int]) = {
    f() foreach {case (x,y) => println(s"$x: $y")}
  }  


  def mostRecentPoints():Map[String, Int] = {
    ListMap(teamdata.mapValues(_.reverse.head).toSeq.sortBy(_._1):_*)
  }

最佳答案

一种明确强调递归方法的方法是定义一个小函数来使用递归获取列表中的最后一个元素,如下所示:

  def recList(l : List[Int]) : Int = l match {
      case Nil => throw new Exception("Empty list")
      case x :: Nil => x
      case x :: xs => recList(xs)
  }

这也是利用 Scala 的模式匹配工具来解构列表。那么这只是在您的 map 上调用此函数的情况:

res8: scala.collection.immutable.Map[String,List[Int]] = Map(MU -> List(10, 20, 30), MC -> List(50, 55, 60))

scala> s.mapValues(recList)
res9: scala.collection.immutable.Map[String,Int] = Map(MU -> 30, MC -> 60)

关于scala - 如何递归获取 Scala map 中包含的每个列表的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295821/

相关文章:

spring - 如何设置 Google Cloud 以使用 AngularJS 客户端和 Java

angularjs - 运行功能和位置路径问题

android - 安装失败 INSTALL_PARSE_FAILED_MANIFEST_MALFO

r - 如何在 R 中获取面板数据固定效应回归的 corr(u_i, Xb)

elixir - 编译 riak_core 项目时,Mix 在 deps.compile 上挂起

security - Webpack 样式加载器 appendChild 对 CSP 不友好

performance - numpy数组子维度上的python操作

python - 在 Tkinter 中创建向导

php - 通过 Composer 只安装单个包而不更新其他包

angularjs - 在带有过滤的ng-repeat中反向计数