【发布时间】:2021-09-06 10:08:03
【问题描述】:
我是 Scala 的新手,我正在尝试解决以下简单的编码问题:
编写一个 listOfLists 递归方法,将多个字符串作为可变参数,然后 创建一个字符串列表,每个列表少一个字符串,例如:
listOfLists("3","2","1")应该回馈:List(List("3","2","1"), List("2","1"), List("1"))
我找到的解决方案如下:
def listOfLists(strings: String*): List[List[String]] = {
val strLength = strings.length
@tailrec
def recListOfList(result: List[List[String]], accumulator: Int): List[List[String]] = {
accumulator match {
case x if x < strLength =>
recListOfList(result :+ (strings.toList.takeRight(strings.length - accumulator)), accumulator + 1 )
case _ => result
}
}
val res: List[List[String]] = List(strings.toList)
recListOfList(res, 1)
}
该解决方案有效,但我认为它可以写得更好。 我可以看到的一个问题是我使用 toList 方法将可变参数转换为 List,但问题给我的提示是使用 eta 扩展 _* 但我不知道如何在这种情况下使用它。
然后,我试图找到另一种更有效的方式来编写以下指令:
strings.toList.takeRight(strings.length - accumulator))
但这是我想到的唯一解决方案。
欢迎任何评论(也说这个解决方案一团糟:D(提供正确的理由))
【问题讨论】:
标签: list scala recursion optimization