Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用空格作为填充字符,列出经过右调整的字符串_String_Scala_List_Higher Order Functions - Fatal编程技术网

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的初学者,我尽力把我的问题说清楚,“消除重复变得更有吸引力”。完全同意。非常感谢你,“消除重复变得更有吸引力”。完全同意。非常感谢你。