2014-11-08 101 views
0

我有一个整数列表[1,2,3,4 .... 100]。 我想使用Linq语句使它成为一个新列表: [[1,2],[2,3],[3,4] .... [99,100]] 或[[1,2 ,3],[2,3,4],[3,4,5] ..... [98,99,100]] 取决于用户输入的大小。在VB.NET中使用linq可以做到这一点吗?Linq语句使int列表成为int列表的列表。NET


针对Enigmativity的要求:

考虑对象的列表,我想使用LINQ到列表中的一个功能适用于所有3名连续的项目,然后对其进行聚合得到最后的答案:这里是一个例子:原始列表:Point2D列表(每个点都有X和Y坐标),在该列表中,每2个连续的点(pi,pj)取pi.X^2 + pj.Y^2,把所有这些值都放到一个新的列表中,最后拿出最终列表的总和

+0

你不应该编辑问题,以改变它们的历史 - 这ISN是一个维基。你需要保持这个问题可以理解的答案。 – Enigmativity 2014-11-08 12:02:09

+0

谢谢。下次我会记住这一点 – 2014-11-09 00:54:16

回答

0

这很容易。试试这个:

Dim build As Func(Of Integer, Integer()()) = Function (n) _ 
    Enumerable _ 
     .Range(1, 100) 
     .Take(100 - n) _ 
     .Select(Function (x) Enumerable.Range(x, n).ToArray()) _ 
     .ToArray() 

Dim result = build(2) 

只要把你想要的任何有效的数字作为build参数和它的作品。


这是否适合您修改的问题?

Dim query = _ 
    points _ 
     .Zip(points.Skip(1), Function (p0, p1) p0.X * p0.X + p1.Y * p1.Y) _ 
     .Sum() 

请注意,你的问题不是很清楚,你说说选3分,但随后你的例子仅使用2

+0

谢谢,我想我应该让我的原始问题更清楚一点。在这个问题中,我仅以整数列表为例。但我的目标是:给定一个对象列表,我想用Linq对列表中的每3个连续项应用一个函数,然后将它们聚合以得到最终答案:这里是一个例子: 原始列表: Point2D(每个点都有X坐标和Y坐标),在该列表中,每隔2个点(p1,p2),然后取p1.X^2 + p2.Y^2,将所有这些值放到一个新列表中,最后取最终名单的总和。 – 2014-11-08 09:14:00

+0

@ N.T.C - 这很好,但你应该编辑你的问题或问一个新的问题。在评论中提出这个问题并不是一件好事 - 尤其是在回答中发表评论。 – Enigmativity 2014-11-08 10:35:53

+0

@ Enigmativity-完美的作品。例如,如果计算涉及3个连续的项目,我想我将不得不使用points.Zip(points.Skip(1),points.Skip(2),Function(p0,p1,p2) ....)?我不确定这是否比使用正常For循环慢。我可以做正常的循环,但我一直试图在VB中使用函数式编程.NEt – 2014-11-09 01:20:07