C# 如何从数组和列表中创建一个带键的字典?
我有以下两个系列:C# 如何从数组和列表中创建一个带键的字典?,c#,linq,C#,Linq,我有以下两个系列: List<string> files = Directory.GetFiles(FilePath).ToList().Select(file => new FileInfo(file).Name).ToList(); string[] dirs = Directory.GetDirectories(FilePath); 列出文件= Directory.GetFiles(FilePath).ToList(
List<string> files =
Directory.GetFiles(FilePath).ToList().Select(file => new FileInfo(file).Name).ToList();
string[] dirs = Directory.GetDirectories(FilePath);
列出文件=
Directory.GetFiles(FilePath).ToList().Select(file=>newfileinfo(file.Name).ToList();
字符串[]dirs=Directory.GetDirectories(FilePath);
但是,我想将这两个都添加到一个空字典中,因此我有一个包含路径和文件的大型字典。我不确定的是,如何/在哪里指定键
对于文件,我希望文件名作为键,对于目录,我希望最后一个目录(例如a/b/c中的c)作为键。我知道如何使用FileInfo/DirectoryInfo类获取此信息,但不确定如何在从上面创建字典时包含此信息
我使用的是.NETV3.5,LINQ很好
如果您已经掌握了所需的信息,并且知道如何正确配对,请向表示感谢。您只需使用此语句将其添加到字典中
Dictionary<string, string> myDict = new Dictionary<string, string>();
myDict.Add(file, directory);
Dictionary myDict=newdictionary();
添加(文件、目录);
除非我不理解你?你是在问如何添加它们吗?或者如何将文件与目录正确配对?对于文件,您可以这样做
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);
到目前为止,我最喜欢巴拉R的LINQ答案(他得到了我的支持),但值得一提的是,在一般情况下,当您想要将
列表
和字符串[]
组合到字典
中时,您始终可以使用基本的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]);
}
var MyDictionary=newdictionary();
for(int i=0;i
这可能有点无聊,但它适用于任何一对
IEnumerable
集合。我认为这是可行的。最后一位(参数后的f)阻止代码编译。这应该可以满足我的需要,因为我可以从字典中获取全名(或名称)。fileinfo和directoryinfo都派生自相同的基类型,因此成员相同。我唯一要更改的是获取一个字典,其中文件名/目录名作为键,整个路径作为值?我怎样才能用上面的方法做到这一点?@dotnetdev您是否正在尝试使用一个字典,其中filename和directory名称作为键,FileSystemInfo(基类)实例作为值?如果是这样,在select中,您可以像这样强制转换它们file=>(FileSystemInfo)new FileInfo(file)
,并且您可以Union()
这两个字典。您已经告诉我们您希望键是什么,但是值呢?