6
我有一个LinkedList节点,每个节点存储一个LinkedList的边。我想做一些沿线C#:为什么LinkedList没有带谓词的RemoveAll方法?
nodes.RemoveAll(n => n.edges.Count == 0)
但没有RemoveAll那里。我不明白为什么它没有它,因为其他收藏。这将不得不迭代遍历所有元素,并从我理解的每次只删除一个元素,这对链接列表来说性能不会太差。
现在我必须这样做,而不是:
for (LinkedListNode<MyNode> n2 = nodes.First; n2 != null;)
{
LinkedListNode<MyNode> temp = n2.Next;
if (n2.Value.edges.Count == 0)
nodes.Remove(n2);
n2 = temp;
}
虽然它的工作原理,它使事情看起来比它们是什么更复杂。
已经要求 - http://stackoverflow.com/questions/133487/how-do-i-remove-elements-from-a-linkedlist-in-c-that-match- a-given-criteria – ChrisF 2010-02-07 23:04:15
@Chri sF:不完全一样 - 这个问题只是关于删除一个元素,而不是所有的元素。 – 2010-02-07 23:08:55
也许创建一个只有Edges.Count> 0的新链接列表会更快(而不是在旧列表中执行所有这些删除操作)。马克·拜尔斯解决方案将在下面做。 – Zyphrax 2010-02-07 23:22:52