大家好我试着这样做:删除元素
public List<DirectoryInfo> RemoveDuplicates()
{
foreach (KeyValuePair<string, List<DirectoryInfo>> entry in b)
{
var wtf = a.RemoveAll(x => entry.Value.Contains(x) && x.Parent.Name == entry.Key);
}
return a;
}
这应该是告诉删除我原来DirectoryInfos是在我的字典B.我想要的清单副本功能通过比较列表A的名称和父母名称与我的字典中的父(键)和子文件夹(值)列表来完成此操作。我的列表A实际上是DirectoryInfos的一个列表,但它的所有子文件夹,所以它记住它的名字并知道它的父母。对于词典,我试图在for循环中删除出现在删除它的每个父名称。我想这样做的,检查的“跆拳道”的价值和它说0
编辑
列表中包含的项目=> 9.4.3.4(这是x或x.name),ACE (这是x.parent名父名的一个例子)
Dictionnary B =>包含此完全相同,如果我在调试去
[0] {[Name="IG"-Version="6_6", System.Collections.Generic.List`1[System.IO.DirectoryInfo]]} System.Collections.Generic.KeyValuePair<string,System.Collections.Generic.List<System.IO.DirectoryInfo>>
所以[0]位置的内部的密钥包含=
Key "Name=\"IG\"-Version=\"6_6\"" string
并在值我们有一个子文件夹列表生病显示如何一个名字的样子。 +
[0] {6.6.1.107_8} System.IO.DirectoryInfo
所以我试着去看看有没有,如果我们有任何内部相同的文件夹与父名称匹配器列表中检查的关键。删除它们
********* EDIT 2 *******
因此,这将是我想要出现在字典中B文件清单一去除的东西的例子。所以最初我们解析这个格式的XML文件:
<Asset Name="SGL" Version="9.6">
<TestCase Name="sst" Version="9.6.1.111" SubVersion=""/>
</Asset>
其中我们则在字典中存储像这样:
Key "Name=\"SGL\"-Version=\"9_6\"" string
[0] {9.6.1.111} System.IO.DirectoryInfo
,我们试着在列表中进行比较,如果它包含同样的事情列表如下:
9.6.1.111(它包含文件夹的名称),但它也知道它的父(SLG_9_6)
1)确定有实际需要删除重复? 2)你的问题实际上并不清楚 - 也许如果你有一个例子来说明'a'和'b'(请使用更好的变量名称)以及你期望输出是什么? –
我认为你的逻辑是倒退的。没有必要通过字典来枚举。您只需枚举整个列表并使用WHERE生成输出,并且项目不会出现在字典中。使用词典CONTAINS方法。 – jdweng
100%有重复我会在原始文章底部添加更多预期的输入/输出 – PhillipsJP