目前,我的代码如下所示:
private List<Node> dirtyNodes = new List<Node> dirtyNodes();
public void UpdateDirtyNodes()
{
while(dirtyNodes.Count > 0)
{
Node nodeToUpdate = dirtyNodes[0];
nodeToUpdate.UpdateNode();
dirtyNodes.Remove(nodeToUpdate);
}
}
public void MarkNodeDirty(Node node)
{
if(!dirtyNodes.Contains(node))
{
dirtyNodes.Add(node);
}
}
public void MarkNodeClean(Node node)
{
dirtyNodes.Remove(node);
}
这是代码的性能关键部分,它比我想要的要慢,因为dirtyNodes.Contains在大多数情况下必须遍历整个数组。我想List用 a替换,HashSet因为它应该更快,但我不知道如何使它与UpdateDirtyNodes().
困难在于UpdateNode()可以随时添加或删除节点dirtyNodes,因此有点尴尬的while循环。有没有办法从 HashSet 中获取“第一个”值?顺序无关紧要,我只需要停留在 while 循环中,直到dirtyNodes为空,更新接下来出现的任何节点。
我宁愿避免使用 Linq,因为此代码将成为库的一部分,我不想强迫它们包含 Linq。
我怎样才能做到这一点?
