首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于从集合中删除对象的迭代器的Java模拟

用于从集合中删除对象的迭代器的Java模拟
EN

Stack Overflow用户
提问于 2012-01-03 04:39:21
回答 3查看 2K关注 0票数 3

在Java语言中,我可以使用Iterator.remove()方法http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Iterator.html#remove()迭代集合并从中移除一些对象

这是非常简单和自然的。就像你在冰箱里找食物,然后扔掉过期的食物。如何在c#中做同样的事情?

我想在同一个循环中进行iterateclean-up集合。

有几个相关的问题,例如How to iterate and update a list,但我仍然无法在c#中找到与此操作完全相同的副本

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-03 04:48:13

如果您使用的是List<T>,有一个很方便的方法(RemoveAll)可以做到这一点,它将删除与谓词(表示为委托)匹配的所有元素。例如:

代码语言:javascript
运行
复制
List<Person> people = ...;
people.RemoveAll(person => person.Age < 18);
// Just the adults left now...

这比向后迭代更简单,IMO。

当然,如果你愿意创建一个新的列表,你可以使用LINQ:

代码语言:javascript
运行
复制
var adults = people.Where(person => person.Age >= 18).ToList();
票数 7
EN

Stack Overflow用户

发布于 2012-01-03 04:40:45

在C#中,你可以使用一个for循环来遍历一个集合,并在其中移除项目--这将适用于IList<T>集合。

为了安全起见,您应该向后迭代

代码语言:javascript
运行
复制
for(int i = coll.Count - 1; i >= 0; i--)
{
  if(coll[i] == something)
  {
     coll.RemoveAt(i);
  }
}

如果你能使用LINQ,看看Jon Skeet建议的RemoveAll。这将允许您从列表中删除所有项,而无需迭代,只需提供一个谓词即可。

代码语言:javascript
运行
复制
coll.RemoveAll(i => i == something);
票数 2
EN

Stack Overflow用户

发布于 2012-01-03 04:46:01

仅用于向后循环计数

代码语言:javascript
运行
复制
List<string> collection = new List<String> { "Hello", "World", "One", "Two", "Three"};
collection.Dump("Original List");
for(int i = collection.Count-1; i>=0; i-- )
{
    if (collection[i] == "One"){
        collection.RemoveAt(i);
    }
}
collection.Dump("After deleting");

顺便说一句,这是一个来自Knuth books的经典示例

编辑:此示例在LINQPad中运行良好-用于演示目的。Dump()在VS中不起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8705107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档