【问题标题】:Scala recursive method to search in a listScala递归方法在列表中搜索
【发布时间】:2020-07-20 23:09:57
【问题描述】:

我正在尝试在 scala 中创建一个递归函数来查看包含玩家分数的列表,以便我可以选择前 3 名并将其显示在屏幕上。

名单:

val values = List(score_player1, score_player2, score_player3, score_player4, score_player5)

【问题讨论】:

  • 你试过什么,为什么没有用?你有没有得到一些编译错误?你有没有遇到一些运行时错误?你得到错误的结果了吗?它必须是递归的吗?它必须是尾递归的吗? score 是 Int 还是 Double 还是任何类型的数字?
  • 目前只有一名手动播放器(播放器 1 标准,其余为机器人),所以我只查看播放器 1 的索引,如果它是最大值,我将他显示为获胜者。我只是想尝试使用尾递归来试验 bij,但我不太确定如何在 scala 的列表中使用它。玩家的分数是Ints。
  • 你能用递归实现最大值吗?如果是这样,请粘贴该代码,如果不是,请至少尝试这样做。考虑基本情况和递归情况。另外,请记住空列表没有最大值。

标签: list algorithm scala recursion


【解决方案1】:

在 Scala List 中,您有三种应用排序算法的方法:

def sortBy[B](f: A => B)(implicit ord: Ordering[B]): C

def sorted[B >: A](implicit ord: Ordering[B]): C

def sortWith(lt: (A, A) => Boolean): C

如果你的 score_player 是数字类型,只需:

list.sortBy(_).take(3) 
 // or
list.sortBy(-_).take(3)

您不需要编写显式递归方法,事实上,List 方法会进行递归以提供它们所提供的不同功能。

【讨论】:

  • “确实,List 方法为了提供它们提供的不同功能而进行递归”,实际上,这是错误的,list 的 std 实现使用了 while 循环和可变性为了非常有效。此外,似乎 OP 正在做一些功课,因此可能禁止使用标准方法,它必须进行递归。最后,由于 OP 没有表现出任何解决问题的努力,他/她的问题不应该得到回答。
  • 我知道。有以这种方式工作的折叠实现。但也有一些是使用尾递归实现的,比如 lengthCompare。
  • 据我所知,只有lengthCompare 是这样实现的,请检查source code。无论如何,这不是重点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多