5

Point に似た構造体 TimePoint がありますが、x 値は日時であり、これらのタイムポイントの観測可能なコレクションであり、日時を取り、double 値を返すメソッドです。

このコレクションの日時から返される double の最大値と最小値を取得したいと考えています。

私はlinqが初めてで、これを達成するために監視可能なコレクションに渡す必要があるクエリを理解できません。

ここに私が取得しようとしているものがあります:

double minDouble = 0;
double maxDouble = 0;

foreach(TimePoint item in obsColl)
{
    var doubleVal = ConvertToDouble(item.X); //Here x is a datetime
    if(minDouble > doubleVal)
        minDouble = doubleVal;
    if(maxDouble < doubleVal)
        maxDouble = doubleVal;
}

LINQ を使用してこれを達成するにはどうすればよいですか? それともLINQはこれには理想的ではありませんか?

4

4 に答える 4

4

これにはMaxandを使用できます。Min

double minDouble = obsColl.Min(item => ConvertToDouble(item.X));
double maxDouble = obsColl.Max(item => ConvertToDouble(item.X));
于 2012-11-15T07:34:55.617 に答える
3

この例を確認できます101 LINQ サンプル

于 2012-11-15T07:44:07.413 に答える
2

より効率的です

    double minDouble =ConvertToDouble( obsColl.Min(item => item.X));
    double maxDouble = ConvertToDouble(obsColl.Max(item => item.X));
于 2012-11-15T07:39:19.070 に答える
0

流暢なアサーション パッケージの使用

    [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
    public void MyTestMethod()
    {
        var list = new List<double>() { 1, 3, 5, 2, 9, 4 };

        var minmax = from l in list
                     group l by 1 into g
                     select new
                     {
                         min = g.Min(),
                         max = g.Max()
                     };

        minmax.First().min.Should().Be(1);
        minmax.First().max.Should().Be(9);
    }

linqはグループのない集計を許可しないため、 l による 1 による g へのグループ化はハックですが、それほど悪くはありません。

于 2012-11-15T09:05:02.433 に答える