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