加强型无穷集合:InfiniteList,可指定遍历方向和偏移量,只要集合有元素并且偏移量不为 0,将永远遍历下去。

时间:2021-06-11 22:45:56

主类:

    public class InfiniteList<T> : IEnumerable<T> {
public List<T> SourceList { get; }
int start { get; }
public int Step { get; set; } = 1; public InfiniteList(IEnumerable<T> source) : this(0, source) {
} public InfiniteList(int start, IEnumerable<T> source) {
this.start = Math.Max(Math.Min(start, source.Count()), -1);
SourceList = new List<T>(source);
} public InfiniteEnumerator<T> GetInfiniteEnumerator() {
return new InfiniteEnumerator<T>(this, start);
} public IEnumerator<T> GetEnumerator() {
return GetInfiniteEnumerator();
} IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}

迭代类:

    public class InfiniteEnumerator<T> : IEnumerator<T> {
InfiniteList<T> list;
int start; public int Index { get; set; }
public int Step { get; set; }
public InfiniteEnumerator(InfiniteList<T> source, int start) {
list = source;
Index = start - source.Step;
this.start = start;
Step = source.Step;
} public T Current {
get { return list.SourceList[Index]; }
} object IEnumerator.Current {
get { return Current; }
} public void Dispose() {
} public bool MoveNext() {
if (list.SourceList.Count == 0) {
return false;
}
if (Step == 0) {
return false;
}
Index += Step;
while (Index > list.SourceList.Count - 1) {
Index -= list.SourceList.Count;
}
while (Index < 0) {
Index += list.SourceList.Count;
} return true;
} public void Reset() {
Index = start;
}
}

加强型无穷集合:InfiniteList<T>,可指定遍历方向和偏移量,只要集合有元素并且偏移量不为 0,将永远遍历下去。的更多相关文章

  1. not&lpar;expr&vert;ele&vert;fn&rpar;从匹配元素的集合中删除与指定表达式匹配的元素

    not(expr|ele|fn) 概述 从匹配元素的集合中删除与指定表达式匹配的元素   参数 exprStringV1.0 一个选择器字符串.深圳dd马达 elementDOMElementV1.0 ...

  2. 解决在jsp页面中使用jstl无法遍历request域中list集合的问题

    解决在jsp页面中使用jstl无法遍历request域中list集合的问题 1. 前言 ​ 最近在写一个很简单的Javaweb项目,里面需要将request域中的list集合加载到jsp页面,我使用e ...

  3. ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口

    详见:https://blog.csdn.net/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及Li ...

  4. 005-guava 集合-集合工具类-java&period;util&period;Collections中未包含的集合工具&lbrack;Maps&comma;Lists&comma;Sets&rsqb;,Iterables、Multisets、Multimaps、Tables

    一.概述 工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和java.util.Col ...

  5. Day&lowbar;11【集合】扩展案例2&lowbar;使用普通for循环获取集合中索引为3的元素并打印,统计集合中包含字符串"def"的数量,删除集合中的所有字符串",将集合中每个元素中的小写字母变成大写字母def",

    分析以下需求,并用代码实现 1.定义ArrayList集合,存入多个字符串"abc" "def" "efg" "def" ...

  6. C&num; List 集合 交集、并集、差集、去重, 对象集合、 对象、引用类型、交并差补、List&lt&semi;T&gt&semi;

    关键词:C#  List 集合 交集.并集.差集.去重, 对象集合. 对象.引用类型.交并差.List<T> 有时候看官网文档是最高效的学习方式! 一.简单集合 Intersect 交集, ...

  7. UVA12096 集合栈计算机(map和vector实现双射关系&plus;集合的交并运算的STL)

    题目大意: 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果 ...

  8. 指针数组的初始化和遍历&comma;并且通过for循环方式、函数传参方式进行指针数组的遍历

    /************************************************************************* > File Name: message.c ...

  9. jQuery遍历对象、数组、集合实例

    1.jquery 遍历对象 复制代码代码如下:   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...

随机推荐

  1. 关于java中final关键字与线程安全性

    在Java5中,final关键字是非常重要而事实上却经常被忽视其作为同步的作用.本质上讲,final能够做出如下保证:当你创建一个对象时,使用final关键字能够使得另一个线程不会访问到处于&quot ...

  2. Android入门(三):使用TextView、EditText 和Button接口组件

    我使用的IDE是Android Studio 2.1,虽然使用Eclipse也可以进行Android的开发,但是网上的大神大都推荐Android Studio,愿意了解的朋友可以参考知乎上关于Andr ...

  3. android第二天(项目的组成结构)

    1:src文件夹分析: helloWorld----src(源码文件夹) MainActivity:主界面类----gen(自动生成的源码文件夹) R.java:对应res文件夹 下面又包含三个内部类 ...

  4. FileCopy

    /*[入]指的是到内存里,[出]指的是到内存外*/ import java.io.*; public class MyReadFile{ public static void main(String[ ...

  5. windows 2003 远程登录时如何修改管理员密码

    今天买的vps,需要修改密码.但是自己不会,看网上好多人都说是,按ctrl+alt+del .但是我试过之后发现不对,后来又找到说是使用ctrl+alt+end  更改密码就可以了. 千万不要通过那个 ...

  6. UVA10142&sol;PC110108Australian Voting

    UVA10142/PC110108Australian Voting 10142 Australian Voting Accepted C++11 0.769 2014-02-11 05:01:20 ...

  7. WMS接口平台配置培训

    供应链管理平台地址:https://twms.ninestargroup.com/ibus/#/processconfig?scShortcutld=3_17__1_303 WMS提供WSWMS固定的 ...

  8. codeforces 877b

    B. Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. 工具-VIM配置

    设置缩进的空格数 shiftwidth=4 设置制表符宽度 tabstop=4 高亮显示当前行 cursorline 高亮显示当前列 cursorcolumn

  10. (38)JS运动之淡入淡出

    基本思路:使用样式filter.可是要区分IE浏览器和chrom.firefox的不同,详细也是用定时器来实现. <!DOCTYPE HTML> <!-- --> <ht ...