正在从集合中删除项目
本文关键字:删除项目 集合 | 更新日期: 2023-09-27 17:59:36
我有一个ID列表,具有这些ID的项目将从集合中删除。
foreach(string id in list) {
myitemcollection.Remove(id); // This does not exist. How would I implement it?
}
不幸的是,"Remove"获取了一个完整的项,而我没有它,而"RemoveAt"获取的是一个索引,我也没有。
我怎样才能做到这一点?嵌套循环会起作用,但有更好的方法吗?
一种方法是使用linq:
foreach(string id in list) {
//get item which matches the id
var item = myitemcollection.Where(x => x.id == id);
//remove that item
myitemcollection.Remove(item);
}
如果mycollection也是int列表,则可以使用
List<int> list = new List<int> {1,2,3};
List<int> myitemcollection = new List<int> {1,2,3,4,5,6};
myitemcollection.RemoveAll(list.Contains);
如果它是一个自定义类,比如
public class myclass
{
public int ID;
}
你可以使用
List<int> list = new List<int> {1,2,3};
List<myclass> myitemcollection = new List<myclass>
{
new myclass { ID = 1},
new myclass { ID = 2},
new myclass { ID = 3},
new myclass { ID = 4},
new myclass { ID = 5},
new myclass { ID = 6},
};
myitemcollection.RemoveAll(i => list.Contains(i.ID));
List.RemoveAll方法
删除与指定的谓词。
尝试使用linq:
var newCollection = myitemcollection.Where(x=> !list.Contains(x.ID));
请注意:
- 这假设您的Item集合具有名为
ID
的数据成员 - 这不是最好的性能
如果我正确理解你的问题,请尝试下面的代码snip
foreach (string id in list)
{
if (id == "") // check some condition to skip all other items in list
{
myitemcollection.Remove(id); // This does not exist. How would I implement it?
}
}
如果这还不够好的话。让你的问题更清楚,以获得准确的答案
从理论上讲,您正在处理一个称为闭包的问题。在循环(或for)中,你应该以各种方式复制你的列表(或数组或你正在迭代的内容)(伙计们对此有不同的说法),标记那些你想删除的内容,然后在循环外处理它们。