2017-05-30 89 views
1

目前,我有以下結構對象的列表:按孩子元素平均排序?

public class DataPointSet { 
    public string target{ get; set; } 
    public List<List<decimal>> datapoints{ get; set; } 
} 

一切要追加到此列表是工作,但我需要的基礎上,平均每單元第一指數在datapoints列表來排序。我目前的LINQ to獲得平均:

datapoints.Select(innerList => innerList.First()).Average() 

有沒有辦法排序基於datapoints列表中的每個元素的平均的第一個元素的這個名單?

對不起,如果這是混亂,任何幫助將是偉大的,謝謝!

回答

2

由於datapoints是集合的集合,調用First()需要你傳遞給Average拉姆達內部進行,具體如下:

IEnumerable<DataPointSet> datapoints = ... 
var ordered = datapoints 
    .OrderBy(pointSet => pointSet.datapoints.Average(point => point.First())); 
0

爲您的數據點類和覆蓋比較:

public class DataPoint: IComparable<DataPoint> 
{ 
    public List<decimal> points; 

    [...] 

    public int CompareTo(DataPoint that) 
    { 
     if (this.points.Average() > that.points.Average()) return -1; 
     if (this.points.Average() == that.points.Average()) return 0; 
     return 1; 
    } 
} 

然後你可以在列表中調用Sort。