2015-07-13 16 views
0

我想填充一個具有給定值的字符串向量(即上,下,右,左)。例如,串以下矢量:如何在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") 

不過,我是相當新的斯卡拉,我覺得我可能會丟失一個更好的方式來做到這一點。有沒有更好的方法來填充一個給定值的斯卡拉字符串矢量?

+1

' 「000000」 +:v .map(「0」+ _ +「0」):+「000000」'這不是最一般的ap proach。它只是更簡潔一點。 – jwvh

回答

1

使用jwvh的map方法與*操作上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")