2013-02-28 33 views
0

我想遍歷SortedSet而不必保存我的代碼中的實際位置。任何方式來循環沒有Iterator或保存索引位置的SortedSet?

the official .NET documention我注意到一個First()方法存在,但我沒有找到一個Next<T>()方法或一種(getNextgoNextIterate ...)。

我想要的代碼是這樣的:

private SortedSet<Frame> frames; 

[...] 

public Frame getNextFrame() { 
    if (frames.Next<Frame>()) //didnt exists 
    { 
     return frames.Current<Frame>() //didnt exists 
    } else { 
     return frames.First<Frame>(); 
    } 
} 

框架結構:

public struct Frame 
{ 
    Rectangle zone; 
    TimeSpan duration; 

    public Frame(Rectangle z, TimeSpan ts) 
    { 
     duration = ts; 
     zone = z; 
    } 

} 
+0

你只是想看到的第一個或列表中的第二項?因爲你可以用foreach語句遍歷一個集合,但我不確定這是你在找什麼 – bas 2013-02-28 23:07:39

+1

什麼類型是'frames'?如果您想避免性能命中,您將希望它實施IList 。 – itsme86 2013-02-28 23:09:35

+0

我想瀏覽所有的列表,我的問題是確實存在任何方式有一個可控的保持其位置。 – 2013-02-28 23:10:20

回答

5

你要找的是IEnumerator<T>SortedSet<T>,你可以得到這個SortedSet<T>.GetEnumerator()

所以,你可以這樣做以下:

public class MyClass 
{ 
    private readonly IEnumerator<Frame> _enumerator; 

    public MyClass(SortedSet<Frame> frames) 
    { 
     _enumerator = frames.GetEnumerator(); 
    } 

    public Frame GetNextFrame() 
    { 
     // If there is no next item, loop back to the beginning 
     // you probably won't want this, but a call to MoveNext() is required 
     // it's up to you what to do if there is no next item. 
     if(!_enumerator.MoveNext()) 
      _enumerator.Reset(); 

     return _enumerator.Current; 
    } 
} 

雖然我很驚訝你不能只是利用簡單得多foreach循環:

SortedSet<Frame> frames = ...; 
foreach(Frame frame in frames) 
{ 
    // Do something with each frame 
} 
+1

現貨我會說。 +1 – bas 2013-02-28 23:14:02

+0

你明白了,IEnumerator是我需要做的工作。對於消息的結尾,我不想瀏覽所有SortedList,但是可以在屏幕上繪製實際的Frame。 – 2013-02-28 23:20:24

相關問題