比较字典和列表

本文关键字:列表 字典 比较 | 更新日期: 2023-09-27 18:37:02

我有一个字典==> Dictionary<int, cwObject>样式,在cwObject值中具有不同的属性,我想将其与属性列表进行比较,并创建一个新字典,其中等于列表的值被删除。

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

比较字典和列表

您可以从列表中创建一个哈希集以进行快速查找(或从一开始就使其成为哈希集),然后您可以过滤字典中的项目并从中创建新字典。

对于此示例,我假设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);

你的问题不完整,但我尽力写这个例子,试试这个:

//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();
    }