如何在Scala中填充字符串向量?

时间:2015-07-13 04:42:07

标签: scala

我想在所有方面(即顶部,底部,右侧,左侧)填充具有给定值的字符串向量。例如,以下字符串向量:

1122
1122
3344
3344

应如下所示:

000000
011220
011220
033440
033440
000000

当然,这种表示纯粹是出于视觉目的,它实际上是一个字符串向量。

我发现我可以使用以下代码完成此操作。

val v = Vector("1122", "1122", "3344", "3344")
Vector("000000") ++ (for { r <- v } yield "0" + r + "0") ++ Vector("000000")

但是,我对Scala相当新,我觉得我可能错过了更好的方法来实现这一点。有没有更好的方法在Scala中使用给定值填充字符串向量?

1 个答案:

答案 0 :(得分:1)

map上使用jwvh的*方法和String运算符:

def repeat(len: Int, c: Char) = c.toString * len

def padLeftRight(s: String, len: Int, c: Char) = {
  repeat(len - 1 - s.size, c) + s + c
}

def padSeq[S <: Seq[String]](xs: S, c: Char) = {
  val len = xs.map(_.size).max + 2
  val padded = repeat(len, c)
  padded +: xs.map(padLeftRight(_, len, c)) :+ padded
}

在示例中使用padSeq

val v = Vector("1122", "1122", "3344", "3344")
val result = padSeq(v, '0')

给出:

Vector("000000", "011220", "011220", "033440", "033440", "000000")