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

时间:2011-05-04 22:39:05

标签: c# linq

我有这两个系列:

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

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

但是,我想将这两个添加到空字典中,所以我有一个包含路径和文件的大字典。我不确定的事情,我如何/在哪里指定密钥?

对于文件,我希望文件名作为密钥,对于目录,我希望最后一个目录(例如a / b / c中的c)成为密钥。我知道如何使用FileInfo / DirectoryInfo类获取此信息,但不知道如何在从上面创建字典时包含它?

我正在使用.NET V3.5,LINQ很好。

由于

3 个答案:

答案 0 :(得分:8)

对于文件,您可以

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);

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

到目前为止,我最喜欢 Bala R 的LINQ答案(并且他有我的upvote),但值得一提的是,在一般情况下,当你想要组合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>集合。