c# - 如何回到列表的开头?
问题描述
我正在尝试使用这些方法Skip()
并Take()
从列表中获取值。但是当列表结束时,我无法回到列表的开头。
List<string> list = new List<string>();
list.Add("Duck1");
list.Add("Duck2");
list.Add("Duck3");
list.Add("Duck4");
list.Add("Duck5");
var list2 = list.Skip(4).Take(3);
foreach(var a in list2) {
Console.WriteLine(a);
}
结果是:
- 鸭子5
我正在寻找的结果是:
- 鸭子5
- 鸭1
- 鸭2
解决方案
您可以编写一个方法来制作一个IEnumerable<T>
循环,然后使用它。
public static IEnumerable<T> ToCircular<T>(this IEnumerable<T> source)
{
while(true)
{
foreach(var x in source) yield return x;
}
}
然后您可以执行以下操作
List<string> list = new List<string>();
list.Add("Duck1");
list.Add("Duck2");
list.Add("Duck3");
list.Add("Duck4");
list.Add("Duck5");
var list2 = list.ToCircular().Skip(4).Take(3);
foreach(var a in list2){
Console.WriteLine(a);
}
Take
但要小心,因为这会导致无限循环,并且在与orTakeWhile
或一起使用时要限制它First
。
推荐阅读
- java - Java Generic Bound 扩展了类似问题
- algorithm - 如何获得一系列作品的最短时间?
- javascript - 如何让 console.clear() 在清除后不给出消息
- ruby-on-rails - 使用简单表单时如何删除必填字段中的星号?
- javascript - 如何在 1 个函数中多次调用语音识别?
- angular - 如何在 Angular6 上使用 colorFilter 和 ngx-leaflet
- java - RecyclerView 不显示来自 JSON 的数据
- javascript - 用javascript触发前进按钮
- typo3 - 全新安装最新的 TYPO3 9.5 LTS 后无法登录后端
- java - 为什么我的程序在获取字符串而不是字符时会自行终止?