5

Microsoftの例から次のコードを考えます。

public class EngineMeasurementCollection : Collection<EngineMeasurement>
{
    public EngineMeasurementCollection()
    {
        Add(new EngineMeasurement { Speed = 1000, Torque = 100, Power = 20 });
        Add(new EngineMeasurement { Speed = 2000, Torque = 160, Power = 60 });
        Add(new EngineMeasurement { Speed = 3000, Torque = 210, Power = 125 });
        Add(new EngineMeasurement { Speed = 4000, Torque = 220, Power = 160 });
        Add(new EngineMeasurement { Speed = 5000, Torque = 215, Power = 205 });
        Add(new EngineMeasurement { Speed = 6000, Torque = 200, Power = 225 });
        Add(new EngineMeasurement { Speed = 7000, Torque = 170, Power = 200 });
    }
}
public class EngineMeasurement
{
    public int Speed { get; set; }
    public int Torque { get; set; }
    public int Power { get; set; }
}

速度またはトルクまたは電力の最小/最大を取得するにはどうすればよいですか。実行しているグラフのスケールを設定するには、これが必要です(正確には、WPFツールキットのグラフ)。EngineMeasurementCollection内に、各EngineMeasurementを反復処理し、Power(またはSpeed)を調べるメソッドを作成できると思いますが、もっと簡単な方法があると思いますか?クラスCollectionにはある種のMinメソッドがありますが、コレクションの最小値を取得しようとしているのではなく(この場合、それが何を意味するのかわかりません)、特定のプロパティの最小値を取得しようとしていることに注意してください(例:速度)。私は、ファンクターでCollection.Minが使用されているのを見ました。そこでできることはありますか?またはLinqを使用しますか?私はあらゆる面で興味があります。ありがとう、デイブ

ボーナスの質問(おそらくこれは最小/最大の答えで私には明らかです)。値(Speedがすでにコレクションにあるなど)を決定するためのオプションは何ですか。この例からは明らかではありませんが、特定の独立変数(たとえば、時間)のデータがすでにある場合は、それ以上必要ない場合があります。では、Collection.Contains( "興味のあるプロパティを指定")のようなものはありますか?

4

3 に答える 3

14
using System.Linq;

var collection = new EngineMeasurementCollection();
int maxSpeed = collection.Max(em => em.Speed);

参照:
LINQMSDNドキュメント
LINQtoObjects5分間の概要

于 2010-09-29T22:37:37.923 に答える
2

gaearonの答えに追加するには:

int minSpeed = collection.Min(em => em.Speed);

最小限のものを手に入れます。しかし、おそらくあなたは自分でそれを理解したでしょう;)

linq を使用して最大値/最小値を見つける方法については、MSDN のサイトでこのリンクを参照してください。

于 2010-09-29T22:39:42.117 に答える
2

「Contains」タイプのメソッドに関する質問に答えるにはAny、その存在をブール値で示したい場合はメソッドを使用できます。または、条件を満たすFirstOrDefault最初のオカレンスを見つけるために使用できます。EngineMeasurement存在する場合は実際のオブジェクトを返し、存在しない場合はそのオブジェクトのデフォルト値 (この場合は null) を返します。

bool result = collection.Any(m => m.Speed == 2000); // true

// or

var em = collection.FirstOrDefault(m => m.Speed == 2000);
if (em != null)
    Console.WriteLine("Torque: {0}, Speed: {1}", em.Torque, em.Speed);
于 2010-09-29T23:21:17.493 に答える