如何使用键和数组和列表创建字典?

问题描述:

我有这两个集合:如何使用键和数组和列表创建字典?

 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

对于文件,你可以做

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

如果你已经拥有你所需要的信息,并且你知道如何配对正确。您只需使用此语句将其添加到字典中即可。

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

除非我不理解你?你问如何添加它们?或者如何正确地将文件与目录配对?

到目前为止,我喜欢巴拉 - [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>集合。