2013-11-09 178 views
0

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

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

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

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

回答

1

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

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

我不知道该图是如何准确地在你的代码来表示,因此让邻接列表可能会有所不同的细节。

+0

你的代码编译:)所以现在我怀疑我理解'yield'关键字的含义。你能解释一下它在目前的情况下做了什么? – pt12lol

+0

参见这里例如:http://csharpindepth.com/articles/Chapter11/StreamingAndIterators.aspx –

+0

而[这里](http://csharpindepth.com/articles/chapter6/iteratorblockimplementation.aspx)是血淋淋的细节:) –