我正在设计一个Graph类(列表和矩阵实现)。我必须提供GetAdjacencies(int vertex)
等方法。
在第一时间我想到了返回IEnumerable
,这样我就可以使用foreach
语句迭代结果。但是在下一刻,我意识到这是一个可怕的解决方案,因为每次GetAdjacencies(int vertex)
发生时都必须创建新列表。
接下来我想到了返回Enumerator
,但是这样我就无法使用foreach
语句迭代结果。然而效率要好得多(我将实现许多图算法,我对优化非常感兴趣)。
你能告诉我在C#中做到这一点的正确方法是什么?
答案 0 :(得分:1)
每次调用方法时都不必创建新列表。例如,使用迭代器块:
public IEnumerable<int> GetAdjacencies(int vertex)
{
foreach (int i in adj[vertex])
yield return i;
}
我不知道您的代码中图表的确切程度如何,因此获取邻接列表的详细信息可能会有所不同。