2014-11-06 101 views
2

我有一個Beam對象的列表。每個Beam類都有X,Y屬性的座標,它也有一個Height屬性。使用LINQ從列表中獲取特定屬性的最大值的對象

現在,這裏是我的初步名單:

List1 = {beam1, beam2, beam3, beam4} 

beam1 = {X = 0, Y = 0, Height = 40} 
beam2 = {X = 200, Y = 0, Height = 40} 
beam3 = {X = 200, Y = 0, Height = 60} 
beam4 = {X = 400, Y = 0, Height = 40} 

正如你可以看到BEAM2BEAM3在同一點,我希望有一個名單,我只能用最大Height在有梁每個不同的點。

因此,使用LINQ最終名單將是:

List2 = {beam1, beam3, beam4} 

回答

3

您可以使用GroupBy他們基於XY組和各組的最大高度選擇項目:

beams.GroupBy(b => new { b.X, b.Y }) 
.Select(g => g.First(x => x.Heigth == g.Max(h => h.Height))) 
.ToList(); 

我個人會用MaxBy方法來獲得最大光束。身高:

beams.GroupBy(b => new { b.X, b.Y }) 
.Select(g => g.MaxBy(x => x.Heigth)) 
.ToList(); 
+0

謝謝你這麼多Selman22。它真的幫助了我。 – Vahid 2014-11-06 09:13:28

2

試試這個: -

var query = List1.GroupBy(x => new { x.X, x.Y }).Select(x => x.First(y => y.Height == x.Max(z => z.Height))); 
+1

Max返回最大高度,而不是具有最大值的元素。高度。 – 2014-11-06 09:03:07

+1

@ Selman22 - Yup糾正!我在每組中獲得最大高度,但現在它與你的一樣:P – 2014-11-06 09:06:39

相關問題