无限循环的数据结构

本文关键字:数据结构 无限循环 | 更新日期: 2023-09-27 18:08:58

我正在寻找一个数据结构,我可以用项目填充,并像IEnumerator调用MoveNext(),但当它到达列表的末尾自动循环回到开始。我可以想到两种方法来做到这一点,要么使用链表并将其链接到自身,要么只是编写逻辑来检查IEnumerator是否。Current是null和reset,两者都很琐碎,但我想先检查一下框架中是否有东西已经可以做到这一点。

它看起来像这样:

public interface IInfiniteEnumerable<T>
{
    bool MoveNext();
    T Current();
}

编辑:根据答案,这是可行的:

class Program
{
    static void Main(string[] args)
    {
        var lst = new List<string>
        {
            "A",
            "B",
            "C"
        };
        IEnumerator<string> enumerator = lst.RepeatIndefinitely().GetEnumerator();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        Console.ReadLine();
    }
}
public static class Extensions
{
    public static IEnumerable<T> RepeatIndefinitely<T>(this IEnumerable<T> source)
    {
        while (true)
        {
            foreach (var item in source)
            {
                yield return item;
            }
        }
    }
}

无限循环的数据结构

创建起来非常简单。在无限循环中迭代并产生序列中的项:

public static IEnumerable<T> LoopForever<T>(this IEnumerable<T> source)
{
    while (true)
        foreach (var item in source)
            yield return item;
}

Unity3D将其用于并发执行(例如帧更新和协同程序),请尝试

IEnumerator<T>

http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx