[英]Get Distinct values out of List<Object>
我有一個包含Beam
類實例的List
。 這些Beam
對象中的每個都有一個Elevation
屬性。
List<Beam> Beams = new List<Beam> {Beam1, Beam2, ...};
public class Beam
{
public double Elevation;
}
現在,我想創建一個包含不同高程的List<double>
。 例如,如何編寫一個接受Beams列表的方法,如下所示
var Beam1 = new Beam { Elevation = 320);
var Beam2 = new Beam { Elevation = 320);
var Beam3 = new Beam { Elevation = 640);
var Beam4 = new Beam { Elevation = 0);
List<Beam> Beams = new List<Beam> {Beam1, Beam2, Beam3, Beam4};
並給出以下消除重復的高程的方法:
listOfElevations = {0, 320,640}
使用Linq-特別是Enumerable.Distinct()
方法在這里很關鍵:
var listOfElevations = beams.Select(x => x.Elevation) //project to Elevations
.Distinct() // pick only distinct ones
.ToList(); //make it a list
使用LinQ非常簡單:
var listOfElevations = Beams.Select(x => x.Elevation).Distinct().ToList();
您正在選擇“高程”的值,選擇“不同的”值,使其成為“列表”,因為它是您的預期輸出。
List<Beam> Beams = new List<Beam> {Beam1, Beam2, Beam3, Beam4};
var differentBeams = Beams.Select(b => b.Elevation).Distinct().ToList();
使用LINQ
另一種方法,如果您擁有多個屬性並且想要獲得唯一列表,則這可能會很有用
beams.GroupBy(x => x.Elevation).Select(g => g.Key);
1)使Beam工具IComparable:
public class Beam : IComparable
{
public double Elevation; //consider changing this to property, btw.
public int CompareTo(object obj) {
if (obj == null) return 1;
Beam otherBeam = obj as Beam;
return this.Elevation.CompareTo(otherBeam.Elevation);
}
}
2)使用Distinct():
var listOfElevations = Beams.Distinct().Select(x=> x.Elevation).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.