Linq to Objects - 从数字列表中返回数字对
var nums = new[]{ 1, 2, 3, 4, 5, 6, 7};
var pairs = /* some linq magic here*/ ;
=> pairs = { {1, 2}, {3, 4}, {5, 6}, {7, 0} }
pairs
的元素应该是二元素列表,或者是某些元素的实例具有两个字段的匿名类,类似于 new {First = 1, Second = 2}
。
var nums = new[]{ 1, 2, 3, 4, 5, 6, 7};
var pairs = /* some linq magic here*/ ;
=>
pairs = { {1, 2}, {3, 4}, {5, 6}, {7, 0} }
The elements of pairs
should be either two-element lists, or instances of some anonymous class with two fields, something like new {First = 1, Second = 2}
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
另一种选择是使用 SelectMany LINQ 方法。这更适合那些希望遍历项目列表并为每个项目返回 2 个或更多属性的人。无需为每个属性再次循环遍历列表,只需一次。
Another option is to use the SelectMany LINQ method. This is more for those who wish to iterate through a list of items and for each item return 2 or more of it's properties. No need to loop through the list again for each property, just once.
另一个使用
index
和index + 1
的简单解决方案。最后一项无效,必须使用
SkipLastN()
删除。Another simple solution using
index
andindex + 1
.Last item is invalid and must be removed with
SkipLastN()
.这给出了所有可能的对(vb.net):
编辑:
注意:最后一对丢失,正在处理
编辑:
将
uniquePairs
与对{nums.Last,0}
this gives all possible pairs(vb.net):
Edit:
note: the last pair is missing, working on it
Edit:
union
uniquePairs
with the pair{nums.Last,0}
默认的 linq 方法都无法通过一次扫描来延迟执行此操作。压缩序列本身会进行两次扫描,并且分组并不完全是懒惰的。最好的选择是直接实现它:
None of the default linq methods can do this lazily and with a single scan. Zipping the sequence with itself does 2 scans and grouping is not entirely lazy. Your best bet is to implement it directly:
试试这个:
Try this:
(警告:看起来很丑)
(warning: looks ugly)
这可能比您需要的更笼统 - 您可以设置自定义
itemsInGroup
:编辑:
如果您想附加零(或其他数字),以防最后一个组的大小不同:
This might be a bit more general than you require - you can set a custom
itemsInGroup
:EDIT:
If you want to append zeros (or some other number) in case the last group is of a different size:
用法:
usage:
如果您需要最后一对填充零,则如果列表计数为奇数,则可以在进行分组之前添加它。
另一种方法可能是:
或者您使用 MoreLinq,它有很多有用的扩展:
If you need the last pair filled with zero you could just add it before doing the grouping if the listcount is odd.
Another approach could be:
Or you use MoreLinq that has a lot of useful extensions: