2014-11-08 161 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