2014-07-10 48 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();