Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从偏移量开始并遍历整个列表?_C#_List_Circular Buffer - Fatal编程技术网

C# 如何从偏移量开始并遍历整个列表?

C# 如何从偏移量开始并遍历整个列表?,c#,list,circular-buffer,C#,List,Circular Buffer,这就是我的清单 [0], [1], [2], [3], [4] 我希望能够循环通过这些-但这里的技巧是,我想从一个偏移开始,然后循环回到那个偏移 前 例2 我曾考虑过使用常规列表,并尝试将此概念实现到for循环中,但我不确定是否希望这样做,如果他们的方法更简洁的话 基本上,不要从0开始,循环回到起始点,然后通过元素返回偏移量。您实际上是在描述环形缓冲区或循环缓冲区 简单的实现是 int start; // Set your desired start offset for (int i =

这就是我的清单

[0], [1], [2], [3], [4]
我希望能够循环通过这些-但这里的技巧是,我想从一个偏移开始,然后循环回到那个偏移

例2

我曾考虑过使用常规列表,并尝试将此概念实现到for循环中,但我不确定是否希望这样做,如果他们的方法更简洁的话


基本上,不要从0开始,循环回到起始点,然后通过元素返回偏移量。

您实际上是在描述环形缓冲区或循环缓冲区

简单的实现是

int start; // Set your desired start offset

for (int i = start; i < myList.Length; i++)
{
    // do stuff
}

for (int j = 0; j < start; j++)
{
    // do stuff
}

您实际上是在描述环形缓冲区或循环缓冲区

简单的实现是

int start; // Set your desired start offset

for (int i = start; i < myList.Length; i++)
{
    // do stuff
}

for (int j = 0; j < start; j++)
{
    // do stuff
}

这是我的C实现,它使用了一个扩展方法,我认为我的所有依赖项也是如此

我知道,对于这样一件简单的事情,这似乎需要发布很多代码,但它主要是验证代码,在我正在编写的应用程序中,它非常关键,可以完美地使用定义良好的行为。很多其他的方法都建立在这两个函数之上

以这种方式迭代的性能似乎也很好,相对于应用于迭代值的操作而言,它从来不是瓶颈

跨度和跨度范围扩展方法 使用制度; 使用System.Collections.Generic; 使用Common.FluentValidation; 命名空间公共扩展 { 公共静态部分类扩展方法 { /// ///获取相对于定位点的数组的索引,该定位点沿任意方向无缝跨越数组边界。 ///返回集合中某个元素的计算索引值,就像该集合是连续元素环缓冲区一样。 /// ///迭代器应返回到零的索引值。 ///用于偏移迭代的固定或可变位置。 ///从锚点偏移的固定或可变位置。 ///计算集合中某个元素的索引值,就像该集合是连续元素环缓冲区一样。 公共静态int span此int p_翻转、int p_锚定、int p_偏移 { //防止'n'的绝对值大于计数 int n=p_锚定+p_偏移%p_滚动; //若“n”为负数,则结果比翻转小n 如果n<0 n=n+p_翻转; 返回n; } /// ///从指定的开始位置到包含的结束位置对集合进行迭代。迭代器始终递增 ///自始至终,将原始集合视为要投影到新表单中的项目的连续环。 ///返回项目的计划集合,该集合可以包含原始集合或项目子集中的所有项目。 ///计划集合中的第一个项目将是位于索引位置p_first的原始集合中的项目。 /// /// ///要投影到新窗体中的集合。 ///投影序列中第一个元素的从零开始的索引值。 ///投影序列中最后一个元素的从零开始的索引值。 ///项目的投影集合,可包含原始集合或项目子集中的所有项目。 ///计划集合中的第一个项目将是位于索引位置p_first的原始集合中的项目。 公共静态IEnumerable SpanRange此IList p_集合,int p_first,int p_last { //证实 p_系列 .不能全部或全部取消托收; p_优先 .mustbewishinrange 0,p_collection.Count-1,p_first; 最后 .mustbewishinrange 0,p_collection.Count-1,p_last; //初始化 int Rollover=p_collection.Count;
int Count=p_first这是我的C实现,它使用了一个扩展方法,我认为我的所有依赖项也是如此

我知道对于这样一件简单的事情来说,这似乎有很多代码需要发布,但大部分都是验证代码,在我正在编写的应用程序中,这对于完美地使用定义良好的行为非常关键。很多其他方法都建立在这两个函数之上

以这种方式迭代的性能似乎也很好,相对于应用于迭代值的操作而言,它从来不是瓶颈

跨度和跨度范围扩展方法 使用制度; 使用System.Collections.Generic; 使用Common.FluentValidation; 命名空间公共扩展 { 公共静态部分类扩展方法 { /// ///获取相对于定位点的数组的索引,该定位点沿任意方向无缝跨越数组边界。 ///返回的计算索引值 集合中的一个元素,就好像该集合是一个连续元素环缓冲区。 /// ///迭代器应返回到零的索引值。 ///用于偏移迭代的固定或可变位置。 ///从锚点偏移的固定或可变位置。 ///计算集合中某个元素的索引值,就像该集合是连续元素环缓冲区一样。 公共静态int span此int p_翻转、int p_锚定、int p_偏移 { //防止'n'的绝对值大于计数 int n=p_锚定+p_偏移%p_滚动; //若“n”为负数,则结果比翻转小n 如果n<0 n=n+p_翻转; 返回n; } /// ///从指定的开始位置到包含的结束位置对集合进行迭代。迭代器总是递增的 ///自始至终,将原始集合视为要投影到新表单中的项目的连续环。 ///返回项目的计划集合,该集合可以包含原始集合或项目子集中的所有项目。 ///计划集合中的第一个项目将是位于索引位置p_first的原始集合中的项目。 /// /// ///要投影到新窗体中的集合。 ///投影序列中第一个元素的从零开始的索引值。 ///投影序列中最后一个元素的从零开始的索引值。 ///项目的投影集合,可包含原始集合或项目子集中的所有项目。 ///计划集合中的第一个项目将是位于索引位置p_first的原始集合中的项目。 公共静态IEnumerable SpanRange此IList p_集合,int p_first,int p_last { //证实 p_系列 .不能全部或全部取消托收; p_优先 .mustbewishinrange 0,p_collection.Count-1,p_first; 最后 .mustbewishinrange 0,p_collection.Count-1,p_last; //初始化 int Rollover=p_collection.Count;
int Count=p_首先谢谢你的名字,什么是更复杂的循环缓冲区?很好奇。谢谢你的名字,什么是更复杂的循环缓冲区?很好奇。
int start; // Set your desired start offset

for (int i = start; i < myList.Length; i++)
{
    // do stuff
}

for (int j = 0; j < start; j++)
{
    // do stuff
}