2013-11-09 2 views
0

그래프 클래스 (목록 및 매트릭스 구현 모두)를 디자인하고 있습니다. 나는 GetAdjacencies(int vertex)과 같은 방법을 제공해야합니다.그래프. 반복을위한 인접성

처음에는 IEnumerable을 반환하는 것으로 생각하여 foreach 문을 사용하여 결과를 반복 할 수있게되었습니다. 그러나 다음 번에 나는 GetAdjacencies(int vertex)이 발생할 때마다 새로운 목록을 만들어야하기 때문에 그것은 끔찍한 해결책이라는 것을 깨달았습니다.

다음으로 Enumerator을 반환하는 것으로 생각했지만 그 방법으로는 foreach 문을 사용하여 결과를 반복 할 수 없습니다. 그러나 효율은 훨씬 더 좋습니다 (많은 그래프 알고리즘을 구현할 것이고 최적화에 정말로 관심이 있습니다).

C#에서이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

1

메서드가 호출 될 때마다 새 목록을 만들 필요가 없습니다. 예를 들어 반복자 블록을 사용

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)는 피곤한 세부 사항입니다. :) –

관련 문제