迭代并返回连续 n 个元素的数组
在 Ruby 中,Enumerable 上有一个 each_cons
一个>。它的工作原理是这样的
(1..5).each_cons(3) {|n| p n}
[1,2,3]
[2,3,4]
[3,4,5]
我想用 C# 来做这件事。 LINQ 会很好。
下面的代码做了类似的事情,但它循环一对多,并且还被硬编码为仅返回两个元素
var ints = new int[] { 1, 2, 3, 4, 5, 6, 7 };
var cons = ints.Select((o, i) =>
new int[]{ ints[i], i == ints.Length - 1 ? 0 : ints[i + 1] });
。如果可以将其创建为原始数组的迭代器,而不必创建大量数组,那就太好了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试以下操作
这将返回具有指定值的
IEnumerable>
。如果这是意图的话,您可以随时添加.ToArray
表达式以将其放入数组中(无法判断这是否是 ruby 中[]
的含义)Try the following
This will return an
IEnumerable<IEnumerable<int>>
with the specified values. You can add the.ToArray
expression at any point to get it into an array if that's the intent (can't tell if that's whatthe[]
mean in ruby)您可以创建一个扩展方法,以这种方式实现它:
使用它:
You can create an extension method that achieves it in this way:
Consume it:
这是一个通用的扩展方法,对于我当前的用例来说,它有点复杂,但它似乎有效。
改用 Jay 的实现。速度快得多。我刚刚把这个留在这里,因为杰伊的回答中提到了它。
Here's a generic extension method that turned out to be way to complicated for my current use case but it seems to work.
Use Jay's implementation instead. It's MUCH faster. I just left this one here because it's mentioned in Jay's answer.