2011-05-13 53 views
6

我想把這個字符串分解成2種顏色,並想知道是否有一個更好的方法來實現相同的結果?什麼是打破這個字符串的更有效/更整潔的方式?

// Obtain colour values 
string cssConfig = "primary-colour:Red, secondary-colour:Blue"; 
var parts = cssConfig.Split(','); 
var colour1 = parts[0].Split(':')[1]; 
var colour2 = parts[1].Split(':')[1]; 
+2

你高效的意思是什麼?較少的代碼?處理器時間更少?減少開發工作? – PVitt 2011-05-13 08:33:52

+0

以上全部。雖然不太擔心開發時間。 – Andrew 2011-05-13 08:59:16

回答

7

你可以使用正則表達式

string cssConfig = "primary-colour:Red, secondary-colour:Blue"; 
var reg = new Regex(@"([\w\-]+)\:([\w\-]+)"); 
foreach (Match match in reg.Matches(cssConfig)) 
{ 

} 

你也可以做一些與LINQ

var cssConfigDict = cssConfig.Split(',') 
         .Select(x => x.Split(':')) 
         .ToDictionary(x => x.FirstOrDefault(), y => y.LastOrDefault()); 

有可能是與LINQ更好的辦法!

+0

嗯,兩個upvotes但沒有人_read_正則表達式,至少不是關於css/style屬性的語法 – sehe 2011-05-13 08:25:45

+0

這個問題沒有具體說它是CSS它可能只是一個字符串,將成爲CSS – Dve 2011-05-13 08:28:34

+0

你的權利它不是CSS只是一個存儲在數據庫中的字符串(已經以此方式形成) – Andrew 2011-05-13 08:38:54

2

你可以使用LINQ方法:

var colors = cssConfig.Split(',').Select(x => x.Split(':').Skip(1).Take(1)); 

話雖如此,我會堅持自己的方法。這是明確的代碼,每個人都明白。正則表達式版本和LINQ的版本是比較模糊......

+0

+1進行了測試,建議使用他的方法 – Gabriel 2011-05-13 09:05:55

1

選中此其類似於您的要求,以獲得字典對象形成串

Regex To Linq to Dictionary in C#

string input = "abc:1|bbbb:2|xyz:45|p:120"; 
string pattern = @"(?<Key>[^:]+)(?:\:)(?<Value>[^|]+)(?:\|?)"; 

Dictionary<string, string> KVPs 
    = (from Match m in Regex.Matches(input, pattern) 
     select new 
     { 
      key = m.Groups["Key"].Value, 
      value = m.Groups["Value"].Value 
     } 
     ).ToDictionary(p => p.key, p => p.value); 

foreach (KeyValuePair<string, string> kvp in KVPs) 
    Console.WriteLine("{0,6} : {1,3}", kvp.Key, kvp.Value); 

/* Outputs: 
abc : 1 
bbbb : 2 
xyz : 45 
    p : 120 
*/ 
0

如果你知道訂單總是一樣的。其中你需要爲你的解決方案,反正工作,你可以這樣做:

// Obtain colour values 
string cssConfig = "primary-colour:Red, secondary-colour:Blue"; 
var parts = cssConfig.Split(',',':'); 
var colour1 = parts[1]; 
var colour2 = parts[3]; 
3

一個正則表達式,絕對是一個可能性,但無論是「整潔」或更具可讀性取決於個人的喜好和你的閱讀正則表達式的能力。如果這個實際使用案例實際上只是閱讀那些顏色而不是任意數量的顏色,那麼我可能會保留原來的解決方案。意圖很清楚,同時保持代碼簡單,避免微妙的錯誤,如果正則表達式不是你的強項。

LINQ可能是最具可讀性的變體,並且可以輕鬆地讀取多個鍵值對,同時仍然使用簡單的拆分機制來解析數據。

根據我的經驗,您應該避免爲了可維護性而做的事情是爲這個小而簡單的問題寫出一個非常複雜,通用且看似「簡潔」的解決方案。

相關問題