2014-07-10 4 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

당신은 std.regex에서 replaceAll를 사용할 수 있습니다

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(); 
관련 문제