2014-07-10 47 views
2

D的phobos庫是否提供了類似於std.array.replace的函數,該函數可以通過函數替換數組中的元素而不是所有替換的單個值?例如:以編程方式替換數組中的元素(字符串)

string[] params = ["Apple", "Orange", "Pear"]; 
int pnum = 0; 
string psub() { 
    if (pnum < params.length) 
     return params[pnum++]; 
    return ""; 
} 
writeln(replace("Test 1=? 2=? 3=? 4=?", "?", psub)); 

導致試驗1 =蘋果2 =蘋果3 =蘋果4 =蘋果當期望的結果當然是試驗1 =蘋果2 =橙3 =梨4 =

+0

看起來像SQL預準備語句中的參數。 :)問題是,「?」可能會出現在我們不想替換的字符串中。如何逃避它?用「\?」 ? – DejanLekic

回答

1

您可以使用replaceAllstd.regex

writeln(replaceAll!(s => psub())("Test 1=? 2=? 3=? 4=?", `\?`)); 

或者,你可以使用splitter和範圍:

zip(StoppingPolicy.longest, "Test 1=? 2=? 3=? 4=?".splitter("?"), params) 
    .map!(a => only(a.expand)) 
    .joiner() 
    .joiner() 
    .writeln();