删除字典(string,list of object)中的项

本文关键字:object of list 字典 string 删除 | 更新日期: 2023-09-27 18:05:27

我对编程比较陌生。我有一个字典(字符串,对象列表),喜欢删除对象列表中相似的项。如果列表中没有条目,则从字典中删除该条目。

Obj A属性- id,x,y

Dictionary(string, list(A)) dict = new Dictionary(string,list(A));
List(A) aList = new List(A);
aList.Add(new A(1,1,1));
aList.Add(new A(2,2,2));
dict.Add("ListA",aList);
List(A) bList = new List(A)
bList.Add(new A(1,1,1));
dict.Add("ListB",bList);
for(int i=dict.count-1; i>=0;i--)
{
    List(A) temp = List(A) dict[i].value;
    foreach(var entry in temp)
    {
        if(entry.id=="1")
           temp.remove(entry);
    }    
}

删除字典(string,list of object)中的项

您希望向后循环遍历列表,否则将抛出错误。您将总是向后循环数组以删除项。你从计数中减去1,因为你的数组有10个条目,所以索引是0-9,而不是1-10。

 //loop dict backwards so we can remove items
 for (int i = dict.Count - 1; i >= 0; i--)
        {
            //convert the value to List<>
            List<TestObjs> objs = dict.ElementAt(i).Value as List<TestObjs>;
            //Loop List<> backwards so we can remove items
            for (int j = objs.Count - 1; j >= 0; j--)
            {
                //if current id in list is value, remove it
                if (objs[j].id.Equals(1))
                {
                    objs.RemoveAt(j);
                }
            }
            //if list is now empty remove dict entry
            if (objs.Count.Equals(0))
            {
                //use linq to grab the element at index and pass it's key to Remove
                dict.Remove(dict.ElementAt(i).Key);
            }
        }