我想在所有方面(即顶部,底部,右侧,左侧)填充具有给定值的字符串向量。例如,以下字符串向量:
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中使用给定值填充字符串向量?
答案 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")