2013-02-28 1 views
0

Я хочу, чтобы петля над SortedSet, не сохраняя фактическое положение в моем коде.Любой способ перебрать сортировку без Итератора или сохранить позицию индекса?

В the official .NET documention я заметил, что метод First() существует, но я не нашел способ Next<T>() или вид (getNext, goNext, Iterate ...).

То, что я хочу, чтобы код что-то вроде этого:

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

+1

Какой тип 'frames'? Вы хотите, чтобы он реализовал IList , если вы хотите избежать хитов производительности. – itsme86

+0

Я хочу просмотреть весь список, мой вопрос действительно существует, чтобы иметь сдерживаемый, который сохраняет свою позицию. –

ответ

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

+0

У вас есть смысл, IEnumerator - это то, что мне нужно для выполнения этой работы. В конце вашего сообщения я не хочу просматривать все SortedList, но получить фактический кадр для рисования на экране. –

Смежные вопросы