C# 比较字典和列表

C# 比较字典和列表,c#,dictionary,C#,Dictionary,我有一个Dictionary==>Dictionary样式,在cwObject value中有不同的属性,我想将它与属性列表进行比较,并创建一个新的Dictionary,其中与列表相等的值将被删除 Dictionary<int, cwObject> styles = stylesOT.Objects; List<string> elementToRemove. Dictionary styles=stylesOT.Objects; 列出要删除的元素。 您的问题不完整,

我有一个Dictionary==>
Dictionary
样式,在cwObject value中有不同的属性,我想将它与属性列表进行比较,并创建一个新的Dictionary,其中与列表相等的值将被删除

Dictionary<int, cwObject> styles = stylesOT.Objects;

List<string> elementToRemove.
Dictionary styles=stylesOT.Objects;
列出要删除的元素。

您的问题不完整,但我尽我所能编写了示例,请尝试以下方法:

//example of class cwObject 
 public class cwObject{
    public string stringtocompare;
    public object anyotherobject;


}
//main process
 static void Main(string[] args)
    {
        //List contains string to remove
        List<string> stringtoremove = new List<string>();
        stringtoremove.Add("stringtoremove");

        //dummy data for cwObject
        cwObject cw = new cwObject();
        cw.stringtocompare = "stringok";
        cw.anyotherobject = "anything";

        cwObject cw1 = new cwObject();
        cw1.stringtocompare = "stringtoremove";
        cw.anyotherobject = 100;

        //dummy data for dictionary to compare
        Dictionary<int, cwObject> dictcw = new Dictionary<int, cwObject>();
        dictcw.Add(0,cw);
        dictcw.Add(1,cw1);

        //new dictionary for container of results
        Dictionary<int,cwObject> filtereddict = new Dictionary<int,cwObject>();
        cwObject cwtemp = null;

        //start enumerating
        foreach (string str in stringtoremove)
        {
            foreach (KeyValuePair<int, cwObject> entry in dictcw)
            {
                cwtemp = entry.Value;
                if (!cwtemp.stringtocompare.Equals(str)) {
                    filtereddict.Add(entry.Key,entry.Value);

                }
            }
        }

        //output the result
        foreach (KeyValuePair<int, cwObject> entry in filtereddict)
        {
            cwtemp = entry.Value;
            Console.WriteLine(cwtemp.stringtocompare);
        }

        Console.ReadLine();
    }
//类cwObject的示例
公共类对象{
公共字符串字符串比较;
公共对象任何其他对象;
}
//主要过程
静态void Main(字符串[]参数)
{
//列表包含要删除的字符串
List stringtoremove=新列表();
stringtoremove。添加(“stringtoremove”);
//cwObject的虚拟数据
cwObject cw=新cwObject();
cw.stringtocompare=“stringok”;
cw.anyotherobject=“任何”;
cwObject cw1=新cwObject();
cw1.stringtocompare=“stringtoremove”;
cw.anyotherobject=100;
//用于比较的字典的虚拟数据
Dictionary dictcw=新字典();
添加(0,cw);
加入(1,cw1);
//用于结果容器的新词典
Dictionary filteredect=新字典();
CW对象cwtemp=null;
//开始枚举
foreach(stringtoremove中的字符串str)
{
foreach(dictcw中的KeyValuePair条目)
{
cwtemp=输入值;
如果(!cwtemp.stringtocompare.Equals(str)){
filteredect.Add(entry.Key,entry.Value);
}
}
}
//输出结果
foreach(FilterAddAct中的KeyValuePair条目)
{
cwtemp=输入值;
控制台写入线(cwtemp.stringtocompare);
}
Console.ReadLine();
}

您可以从列表中创建一个用于快速查找的哈希集(或者从一开始就将其设置为哈希集),然后可以从字典中筛选项目并从中创建新字典

对于本例,我假设
cwObject
有一个名为
element
的字符串属性,可以与列表中的字符串进行比较:

HashSet<string> remove = new HashSet<string>(elementToRemove);

Dictionary<int, cwObject> remaining =
  styles.Where(o => !remove.Contains(o.Value.element))
  .ToDictionary(o => o.Key, o => o.Value);
HashSet-remove=新的HashSet(elementToRemove);
剩余词典=
其中(o=>!remove.Contains(o.Value.element))
.ToDictionary(o=>o.Key,o=>o.Value);

欢迎来到SO。请发布您的代码,并尝试使用您的代码解释您的问题。否则,我们很难站在同一个页面上提供任何帮助。请参阅,以便在发布时快速查看检查表。我相信,当我们知道你真正想要什么的时候,这对LINQ来说是相当容易的。。。(我们不知道该列表将包括什么,或者什么是
cwObject
是…)两者如何比较<代码>整数到
字符串
字符串中有什么?格式是什么?我想比较Dic样式(字符串)中与列表中的项目(字符串到)相等的值,并创建一个新的Dic,在其中删除相等的项目..谢谢您能提供一些示例数据吗?