在不使用迭代器或保存索引位置的情况下遍历SortedSet的任何方法

本文关键字:情况下 遍历 SortedSet 方法 任何 位置 索引 迭代器 保存 | 更新日期: 2023-09-27 18:01:43

我想循环遍历SortedSet,而不必在代码中保存实际位置。

在官方的。net文档中,我注意到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;
    }
}

在不使用迭代器或保存索引位置的情况下遍历SortedSet的任何方法

你要找的是SortedSet<T>IEnumerator<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
}