我正在尝试将字符串列表转换为表格" rBrrBB"或" r rb"或" RRB&#34 ;.该字符串必须具有长度6.如果此列表未满,则该列表应以适当数量的空格为前缀
到目前为止我的代码如下
def showColumn(xs:List [String]):String = xs match
{case List()=> "" case x :: xs1 => x.format("")+ showColumn(xs1)}
当我从
打电话时println(showColumn(List("",""," b"," b"," r& #34;" b")))
它只返回" bbrb"。它假设返回" BBRB" 任何帮助都会很感激。
答案 0 :(得分:3)
试试这个:
def showColumn(xs: List[String]): String = xs.map(x => if(x == "") " " else x).mkString
或者,或者:
def showColumn(xs: List[String]): String = xs.map(x => if(x.isEmpty) " " else x).mkString
两者都可以通过将列表中的空字符串更改为空格,然后将列表中的每个字符串合并为单个字符串。
如果你绝对必须使它成为一个递归函数,那么一个非尾递归的解决方案将如下所示:
def showColumn(xs: List[String]): String = xs match {
case Nil => ""
case x :: xs1 => (if(x.isEmpty) " " else x) + showColumn(xs1)
}
最后, tail-recursive 版本稍微复杂一些,因为它使用了一个辅助函数:
import scala.annotation.tailrec
def showColumn(xs: List[String]): String = {
// Tail recursive helper function.
@tailrec
def nextStr(rem: List[String], acc: String): String = rem match {
case Nil => acc
case x :: xs1 => nextStr(xs1, acc + (if(x.isEmpty) " " else x))
}
// Start things off.
nextStr(xs, "")
}