繁体   English   中英

从集合中删除项目

[英]Removing items from collection

我有一个ID列表,带有这些ID的项目将从集合中删除。

foreach(string id in list) {
    myitemcollection.Remove(id); // This does not exist. How would I implement it?
}

不幸的是,“删除”获取一个我没有的完整项目,而“ RemoveAt”获取一个我没有的完整索引。

我该如何实现? 嵌套循环可以工作,但是有更好的方法吗?

尝试使用linq

 var newCollection = myitemcollection.Where(x=> !list.Contains(x.ID));

请注意:

  1. 假设您的Item集合具有名为ID数据成员。
  2. 这不是最好的性能明智的选择...

如果mycollection也是一个整数列表,则可以使用

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

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

如果我正确理解了您的问题,请尝试以下代码片段

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?
    }
}

如果这还不够好。 让您的问题更清楚以获得确切答案

从理论上讲,您正在处理一个叫做闭包的问题。在一个循环中(或用于),您应该以各种方式复制列表(或数组或您要迭代的内容)(这在伙计中有所不同) ,标记您要删除的内容,然后进行循环处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM