图形。邻接预先迭代

时间:2013-11-09 22:16:55

标签: c# graph foreach ienumerable enumerator

我正在设计一个Graph类(列表和矩阵实现)。我必须提供GetAdjacencies(int vertex)等方法。

在第一时间我想到了返回IEnumerable,这样我就可以使用foreach语句迭代结果。但是在下一刻,我意识到这是一个可怕的解决方案,因为每次GetAdjacencies(int vertex)发生时都必须创建新列表。

接下来我想到了返回Enumerator,但是这样我就无法使用foreach语句迭代结果。然而效率要好得多(我将实现许​​多图算法,我对优化非常感兴趣)。

你能告诉我在C#中做到这一点的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

每次调用方法时都不必创建新列表。例如,使用迭代器块:

public IEnumerable<int> GetAdjacencies(int vertex)
{
    foreach (int i in adj[vertex])
        yield return i;
}

我不知道您的代码中图表的确切程度如何,因此获取邻接列表的详细信息可能会有所不同。