2017-05-30 11 views
1

私は現在、以下の構造を持つオブジェクトのリストを持っている:このリストに追加する子要素の平均でリストを並べ替えますか?

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

すべてが働いているが、私はdatapointsリスト内のすべての要素最初のインデックスの平均に基づいて、それをソートする必要があります。私は現在、LINQのは、平均値を取得する:

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

datapointsリストの各要素の最初の要素の平均に基づいて、このリストをソートする方法はありますか?

ご迷惑をおかけして申し訳ございませんが、お手数をお掛けしていただければ幸いです。

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

答えて

2

は、コレクションの収集、First()への呼び出しは、あなたがAverageに渡すラムダの内部で行われる必要があります。

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; 
    } 
} 

リストの並べ替えを呼び出すことができます。

0

は、あなたのデータポイントのクラスを作成し、比較するオーバーライド:次のようにdatapoints以来

関連する問題