无限循环的数据结构
本文关键字:数据结构 无限循环 | 更新日期: 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>