2011-05-04 59 views
2

我有這兩個集合:如何使用鍵和數組和列表創建字典?

 List<string> files = 
      Directory.GetFiles(FilePath).ToList().Select(file => new FileInfo(file).Name).ToList(); 

     string[] dirs = Directory.GetDirectories(FilePath); 

不過,我想這兩個添加到一個空的字典,所以我有一個大字典,路徑和文件。我不確定的事情,我如何/在哪裏指定密鑰?

對於文件,我希望文件名作爲關鍵字,而對於目錄,我希望最後一個目錄(例如,在/ b/c中的c)成爲關鍵。我知道如何使用FileInfo/DirectoryInfo類獲取這些信息,但不確定如何將這些信息包含在上面創建的字典中?

我使用.NET V3.5和LINQ很好。

感謝

+1

你已經告訴我們你想要的鑰匙是什麼,但那些值呢? – Gabe 2011-05-04 22:51:49

回答

7

對於文件,你可以做

var filesDictonary = Directory.GetFiles(FilePath) 
             .Select(file => new FileInfo(file)) 
             .ToDictionary(f => f.Name, f => f); 

的目錄,

var directoriesDictonary = Directory.GetDirectories(FilePath) 
            .Select(d => new DirectoryInfo(d)) 
            .ToDictionary(d => d.Name, d => d); 
+0

我認爲那會奏效。最後一位(參數後的f)阻止編譯代碼。 – dotnetdev 2011-05-04 22:50:24

+0

@dotnetdev修復了語法錯誤 – 2011-05-04 22:52:44

+0

這應該做我需要的,因爲我可以從字典中獲取全名(或名稱)。 fileinfo和directoryinfo都來自相同的基本類型,所以成員是相同的。我唯一要做的就是獲得一個字典,其中文件名/目錄名稱作爲關鍵字,整個路徑作爲值?我怎麼能這樣做與上述? – dotnetdev 2011-05-04 22:57:52

0

如果你已經擁有你所需要的信息,並且你知道如何配對正確。您只需使用此語句將其添加到字典中即可。

Dictionary<string, string> myDict = new Dictionary<string, string>(); 
myDict.Add(file, directory); 

除非我不理解你?你問如何添加它們?或者如何正確地將文件與目錄配對?

0

到目前爲止,我喜歡巴拉 - [R的LINQ回答最好(和他有我給予好評),但它的值得一提的是,在一般情況下,當您想要將List<string>string[]合併爲Dictionary<string, string>時,您可以隨時使用基本的for循環:

var MyDictionary = new Dictionary<string, string>(); 

for (int i = 0; i < Math.Min(MyList.Count, MyArray.Length); i++) 
{ 
    MyDictionary.Add(MyList[i], MyArray[i]); 
} 

它可能有點無聊,但它可以用於任何一雙IEnumerable<T>集合。