如何从数组和列表中创建一个带键的字典



我有两个集合:

      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。

谢谢

对于文件,您可以执行

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

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

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

除非我听不懂你的话?你是在问怎么加吗?或者如何正确地将文件与目录配对?

到目前为止,我喜欢Bala 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>系列。

相关内容

  • 没有找到相关文章

最新更新