c# – 是否可以在不使用Skip或Take的情况下使用指定的起始元素迭代集合?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 是否可以在不使用Skip或Take的情况下使用指定的起始元素迭代集合?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1620字,纯文字阅读大概需要3分钟。
内容图文
![c# – 是否可以在不使用Skip或Take的情况下使用指定的起始元素迭代集合?](/upload/InfoBanner/zyjiaocheng/794/65527e9c8f6344098d06ce7b6c53e46e.jpg)
如果我有如下集合:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
是否可以按正常顺序迭代这些元素,但是从特定元素开始?我不想留下任何东西,因此,收集对于保持不变是很重要的.但是对于中间步骤,我需要按以下顺序收集与这些元素相关的信息:0,15,14(也按递减顺序迭代,从0开始,然后回绕到15和14然后,按此顺序)?
也许foreach循环对我不起作用,但我很难确定一种最有效地做到这一点的方法.
澄清:
使用List< int>类型的任何int集合保证我有从0到某个数字的整数,我想以递增或递减的顺序迭代这些项目,指定一个起始元素,并让迭代回绕以确保所有元素都完全迭代一旦.
我到目前为止学到了什么:
我非常感谢我已经收到的所有帮助.我想我发现用我想要的元素和我想要的顺序开发另一个集合对于我想做的事情是必要的.到目前为止,我会继续评估每个人的建议,并让每个人都发布.
什么为我工作:
请参考我标记为最有用的答案以及我在此处提出的内容,通过制作一个类似的静态方法来扩展它,在需要时提供我正在寻找的增长方向:
public static IEnumerable<T> GetRangeIncreasing<T>(IList<T> source, int startPosition, int count)
{
var index = startPosition;
for (int counter = 0; counter < count; counter++)
{
yield return source[index];
index = (index + 1)%source.Count;
if (index > source.Count - 1)
index -= source.Count;
}
}
解决方法:
看起来像反向迭代器是你真正想要的.最简单的方法是使用IList< T>,因为它支持索引访问.
public static IEnumerable<T> GetRangeDecreasing<T>(IList<T> source, int startPosition, int count)
{
var index = startPosition;
for (int counter = 0; counter < count; counter++)
{
yield return source[index];
index = (index - 1) % source.Count;
if (index < 0)
index += source.Count;
}
}
用法
IList<int> input = Enumerable.Range(0, 16).ToArray();
var output = GetRangeDecreasing(input, 0, 3);
输出将包含3个元素:0,15和14.
内容总结
以上是互联网集市为您收集整理的c# – 是否可以在不使用Skip或Take的情况下使用指定的起始元素迭代集合?全部内容,希望文章能够帮你解决c# – 是否可以在不使用Skip或Take的情况下使用指定的起始元素迭代集合?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。