2014-03-28 41 views
1

我有一個數組,有一些值,也有一些參數字符串。我已經放在下面。 我想根據數組元素替換參數字符串。請幫我做。基於數組元素替換字符串

string[] arrayval = {"Type:1","Action:doit","Message:hai"}; 

string Param = "Type:[Type]#Action:[Action]#Message:[Message]#OutMsg:[OutMsg]#@RetVal:[RetVal]"; 

My Expected Output 


string Param = "Type:1#Action:doit#Message:hai#OutMsg:[OutMsg]#@RetVal:[RetVal]"; 
+1

爲什麼不使用字典而不是數組? – Sagar

回答

3

沒有測試,應該加入一些檢查,但是,看到的版本@Ulugbek Umirov的:)

var pattern = @"\[(.*?)\]"; 
var matches = Regex.Matches(Param, pattern); 

foreach (Match m in matches) { 
    var inb = "[" + m.Groups[1] + "]"; 
    var results = arrayval.Select (s => s.Split(':')) 
          .FindAll(ss => ss[0] == m.Groups[1]) 
          .Select (ss => ss[1]); 
    Param = Param.Replace(inb, results[0]); 
} 

順便說一句... @Ulugbek Umirov的短一點的版本,應該只是罰款:)

Param = Regex.Replace(Param, @"\[(.+?)\]", m => 
    arrayval.Select(s => s.Split(new[] { ':' }, 2)) 
      .Where (p => p.Length == 2) 
      .Where (p => p[0] == m.Groups[1].Value) 
      .Select(p => p[1]) 
      .FirstOrDefault() ?? m.Value); 

更新與更換0如果不存在:

Param = Regex.Replace(Param, @"\[(.+?)\]", m => 
    arrayval.Select(s => s.Split(new[] { ':' }, 2)) 
      .Where (p => p.Length == 2) 
      .Where (p => p[0] == m.Groups[1].Value) 
      .Select(p => p[1]) 
      .FirstOrDefault() ?? "0"); 
+0

這裏Param是什麼? – Neel

+0

@Neel問題宣佈爲 – Cynede

+0

哦,好了! – Neel

3

不是很整齊。但是根據你提供的信息。以下應該工作。

string[] arrayval = { "Type:1", "Action:doit", "Message:hai" }; 
string Param = string.Format("Type:{0}#Action:{1}#Message:{2}", arrayval[0].Split(':')[1], arrayval[1].Split(':')[1], arrayval[2].Split(':')[1]); 

輸出: 類型:1#操作:DOIT#消息:海

0

嘗試以下code..i在VS中做了測試2012

string[] arrayval = { "Type:1", "Action:doit", "Message:hai" }; 

string Param = "Type: " + arrayval[0].Split(Convert.ToChar(":"))[1] + "#Action: " + arrayval[1].Split(Convert.ToChar(":"))[1] + "#Message: " + arrayval[2].Split(Convert.ToChar(":"))[1]; 

輸出: -

Type: 1#Action: doit#Message: hai 
1

稍微修改一下@Heather

Param = Regex.Replace(Param, @"\[(.+?)\]", m => 
{ 
    string paramName = m.Groups[1].Value; 
    string paramValue = arrayval.Select(s => s.Split(new[] { ':' }, 2)) 
           .Where(p => p.Length == 2) 
           .Where(p => p[0] == paramName) 
           .Select(p => p[1]) 
           .FirstOrDefault(); 
    return paramValue ?? m.Value; 
}); 
+0

我需要在我的問題的一個小的變化行動:* [行動]而不是舊的。如果arrayval中的動作表示我需要上述輸出。否則我需要下面的輸出「類型:1#操作:0#消息:hai#OutMsg:[OutMsg]#@ RetVal:[RetVal]」; – user3085540