String 使用空格作为填充字符,列出经过右调整的字符串
我的目标是使用空格作为填充字符,创建一个右调整字符串列表 输入是一个列表(可以是数字列表或字符串列表),输出是一个右调整字符串列表 我的实现如下所示:String 使用空格作为填充字符,列出经过右调整的字符串,string,scala,list,higher-order-functions,String,Scala,List,Higher Order Functions,我的目标是使用空格作为填充字符,创建一个右调整字符串列表 输入是一个列表(可以是数字列表或字符串列表),输出是一个右调整字符串列表 我的实现如下所示: def rightJustify(width: Int)(str: String): String = { require(str.length < w) List.fill(width - str.length)(' ').mkString + str } def makeStrs[T](lst: List[T], useVal
def rightJustify(width: Int)(str: String): String = {
require(str.length < w)
List.fill(width - str.length)(' ').mkString + str
}
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] = {
if (useValue) lst.map(x => rightJustify(5)(x.toString))
else lst.map(_ => rightJustify(5)("")) //Just make several space characters
}
//test code
def makeListStrs: List[String] = {
val header = List("Car", "Cat", "Dog")
val useValue = true
makeStrs(header, useValue) ++ // a bunch of strings
makeStrs((1 to 5).toList, !useValue) ++ // a bunch of spaces
makeStrs((1 to 15).toList, useValue) ++ // a bunch of numbers
makeStrs((1 to 5).toList, !useValue) //a bunch of spaces
}
def rightJustify(宽度:Int)(str:String):String={
要求(长度rightJustify(5)(x.toString))
else lst.map(=>rightJustify(5)(“”))//只需生成几个空格字符
}
//测试代码
def MAKELISTSTR:列表[字符串]={
val标题=列表(“汽车”、“猫”、“狗”)
val useValue=true
makeStrs(header,useValue)+//一组字符串
makeStrs((1到5).toList,!useValue)++//一组空格
makeStrs((1到15).toList,useValue)++//一组数字
makeStrs((1到5).toList,!useValue)//一组空格
}
代码是有效的,但我不确定函数makeStrs
是否可以变得更简洁。
任何提示都非常感谢。是的,我认为可以更简洁
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] =
if (useValue) lst.map(x => f"$x%5s")
else lst.map(_ => " "*5)
是的,我认为更简洁是可能的
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] =
if (useValue) lst.map(x => f"$x%5s")
else lst.map(_ => " "*5)
@jwvh的解决方案包括同时优化
makeStrs
和rightJustify
这两个方面,这是非常好的。但是我们也可以单独考虑<代码> MaGrSTS < /C> >:
你的
makeStrs
已经很短了,在现实生活中,我可能会让重复过去。但是当涉及到更多的代码时,消除重复就变得更具吸引力
以下是减少重复的一种方法:
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] = {
lst.map(x => rightJustify(5)(
if (useValue) x.toString
else "")
还有一个:
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] = {
val formatter: T => String =
if (useValue) _.toString
else _ => ""
lst.map(x => rightJustify(5)(formatter(x)))
}
第二个更长,但我认为仍然值得思考。它只检查useValue
一次,这是我喜欢的。不是因为担心效率,而是因为我认为再次进行检查显然符合问题的结构
我也不明白对你的问题投了多少反对票。堆栈溢出有时对新手来说是非常困难的。@jwvh的解决方案包括同时优化
makestr
和rightJustify
。但是我们也可以单独考虑<代码> MaGrSTS < /C> >:
你的
makeStrs
已经很短了,在现实生活中,我可能会让重复过去。但是当涉及到更多的代码时,消除重复就变得更具吸引力
以下是减少重复的一种方法:
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] = {
lst.map(x => rightJustify(5)(
if (useValue) x.toString
else "")
还有一个:
def makeStrs[T](lst: List[T], useValue: Boolean): List[String] = {
val formatter: T => String =
if (useValue) _.toString
else _ => ""
lst.map(x => rightJustify(5)(formatter(x)))
}
第二个更长,但我认为仍然值得思考。它只检查useValue
一次,这是我喜欢的。不是因为担心效率,而是因为我认为再次进行检查显然符合问题的结构
我也不明白对你的问题投了多少反对票。堆栈溢出有时对新手来说非常困难。不太清楚为什么这个问题会被否决。我是Scala的初学者,我尽力把我的问题说清楚。不太清楚为什么这个问题被否决了。我是Scala的初学者,我尽力把我的问题说清楚,“消除重复变得更有吸引力”。完全同意。非常感谢你,“消除重复变得更有吸引力”。完全同意。非常感谢你。