2011-03-27 30 views
5

我剛剛啓動Scala,因此讓我的頭腦以更實用的方式做事。斯卡拉 - 以功能方式修改字符串

只是不知道是否有實現類似下面的一個功能更強大的方式:

def expand(exp: String): String = { 
    var result = exp 
    for ((k,v) <- libMap) {result = result.replace(k, "(%s)".format(v))} 
    result 
} 

或一般來講,給出一個字符串和一些迭代集合,經過收集和每一個元素,增量修改輸入字符串。

乾杯

回答

8

一般模式

var result = init 
for (foo <- bar) { result = f(result, foo)} 
result 

可在功能上表現爲

bar.foldLeft(init)(f) 

所以你的情況下,該becomas:

libMap.foldLeft(exp){ case(result, (k,v)) => result.replace(k, "(%s)".format(v))}