当前位置: 首页 > 知识库问答 >
问题:

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

斜单鹗
2023-03-14

我是Scala的新手,我想知道如何从映射中包含的每个列表中递归获取最后一个元素。地图中包含的数据是从文本文件中读取的,该文本文件包含过去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]类型的地图,它将为我提供每支球队的最新得分记录,例如曼联:94分,曼城: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):_*)
  }

共有3个答案

羊舌高峰
2023-03-14

为什么不用List.last?我不认为自己做轮子是个好主意。

宋航
2023-03-14
val x = Map[String, Seq[Int]]("MU" -> Seq(20,30,56,45),"MC" -> Seq(20,30,56,45,78))

x.map(a => a._1 -> a._2.last)

这不是更简单吗?

富涛
2023-03-14

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

  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的模式匹配功能来解构列表。那么这就是在地图上调用这个函数的简单例子:

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)
 类似资料:
  • 本文向大家介绍Python中如何获得列表的最后一个元素,包括了Python中如何获得列表的最后一个元素的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到从列表中获取最后一个元素的不同方法。让我们一一看。 使用索引值 我们可以使用索引获取列表的最后一个元素。我们可以通过列表的长度来获取最后一个元素的索引。让我们看一下代码。 示例 输出结果 如果执行上述程序,则将得到以下结果。 使用负索

  • rank ▲ ✰ vote url 61 374 45 700 url 获取列表最后一个元素 在Python里,如何获取一个列表的最后一个元素? some_list[-1]最短最Pythonic的方法. 事实上你可以用这个语法做好多事.some_list[-n]语法获取倒数第n个元素.所以some_list[-1]获取最后一个元素,some_list[-2]获取倒数第二个,等等.最后some_li

  • 本文向大家介绍在Scala中找到列表的最后一个元素,包括了在Scala中找到列表的最后一个元素的使用技巧和注意事项,需要的朋友参考一下 假设我们在Scala中有一个列表,该列表在scala.collection.immutable包下定义。众所周知,列表是相同类型元素的集合,其中包含不可变(不可更改)数据。我们通常应用last函数来显示列表的最后一个元素。 使用最后一个关键字 以下Scala代码显

  • 问题内容: 在Python中,如何获取列表的最后一个元素? 问题答案: 是最短和最的。 实际上,你可以使用此语法做更多的事情。该语法获取第n到最后一个元素。因此获取最后一个元素,获取倒数第二个,依此类推,一直向下到,这将为你提供第一个元素。 你也可以通过这种方式设置列表元素。例如: 请注意,如果期望的项目不存在,则按索引获取列表项将引发。这意味着如果为空将引发异常,因为空列表不能有最后一个元素。

  • 问题内容: 我有一个这样的清单: 我想要这样的结果(列表中的 每个 第一个元素): 我尝试了[:: 1] [0],但没有用 我几周前才开始学习Python。Python版本= 2.7.9 问题答案: 您可以从列表理解中的每个元素获取索引 同样,要学究,您没有的,您没有的。

  • 我想检索进程的最后2个版本: 预期结果将是: 我写了这个查询,但我不喜欢它。。。我不能将它作为子查询包含在中<代码>从中选择(从中选择子字符串索引(按顺序排列(ORDER BY