2010-05-12 55 views
8

我有一個類似字符串的數組,如下所示: "test1|True,test2|False,test3|False,test4|True"。 這實質上是一個二維數組,像這樣 [test1] [True] [test2] [False] [test3] [False] [test4] [True]。如何將二維數組轉換爲字典對象

我想這個轉換成dictionary<string,bool>使用LINQ,是這樣的:

Dictionary<string, bool> myResults = results.Split(",".ToCharArray).ToDictionary() 

什麼想法?

+0

有類型的字符串數組沒有這樣的事情。我認爲你的意思是一個字符串編碼的數組。 – 2010-05-12 09:17:15

+0

對不起,是的,它是一個字符串,我想轉換成linq語句內部的二維數組,並將其轉換爲字典對象。 – Webcognoscere 2010-05-12 09:21:26

+0

10這個問題的答案只是說明有多少種不同的處理方式。到目前爲止,所有人的回答都略有不同,但都是有效的。我的投票是[Marcelo's](http://stackoverflow.com/questions/2817367/how-to-convert-a-2-d-array-into-a-dictionary-object/2817419#2817419),正如我的想法它是最優雅的。 – 2010-05-12 09:32:50

回答

5

首先把你的字符串轉換成合適的陣列:

String sData = "test1|True,test2|False,test3|False,test4|True"; 
String[] sDataArray = sData.Split(','); 

然後你就可以處理String[]成詞典:

var sDict = sDataArray.ToDictionary(
     sKey => sKey.Split('|')[0], 
     sElement => bool.Parse(sElement.Split('|')[1]) 
    ); 

ToDictionary方法有兩個函數,它們從每個源數組元素中提取鍵和元素數據。

在這裏,我通過分割「|」來提取每一半,然後使用前半部分作爲關鍵字,第二部分解析成bool作爲元素。

很顯然,這不包含錯誤檢查,因此如果源字符串不是逗號分隔的,或者每個元素不是管道分隔的,則可能會失敗。所以要注意源字符串的來源。如果它完全不符合這種模式,它會失敗,所以你需要做一些測試和驗證。

Marcelo's答案很相似,但我認爲它更優雅一些。

+0

謝謝西蒙,謝謝你解釋它。 – Webcognoscere 2010-05-12 09:36:30

8
var d = results.Split(',') 
       .Select(row => row.Split('|')) 
       .ToDictionary(srow => srow[0], srow => bool.Parse(srow[1])); 
+0

輝煌,感謝一位百姓 – Webcognoscere 2010-05-12 09:32:31

-1

像這樣的東西應該工作:

var fullString = "Test,True|Test2,False"; 

var query = from item in fullString.Split('|') 
      let splitted = item.Split(',') 
      let value = bool.Parse(splitted[1]) 
      select new { Key = splitted[0], Value = value }; 

var dict = query.ToDictionary(pair => pair.Key, pair => pair.Value); 
-1

你可以嘗試這樣的事:

var resultsArray = results.Split(','); 

var myResults = new Dictionary<string, bool>(); 

foreach (var str in resultsArray) 
{ 
    var parts = str.Split('|'); 
    myResults.Add(parts[0], bool.Parse(parts[1])); 
}