2013-11-09 183 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)是血淋淋的細節:) –