Question

Étant donné le code suivant à partir d'un exemple 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; }
}

Comment puis-je obtenir le minimum / maximum de la vitesse ou du couple ou de puissance. Je en ai besoin pour définir l'échelle sur un graphique que je fais (graphique WPF Toolkit pour être précis). Je suppose que je pourrais avoir une méthode à l'intérieur EngineMeasurementCollection qui fait passer dans chaque EngineMeasurement et regarde puissance (ou vitesse), mais je pense qu'il y est un moyen beaucoup plus facile? La classe Collection dispose d'une certaine sorte de méthode Min, mais note, je ne suis pas essayer d'obtenir le minimum de la collection (je ne sais pas ce que cela signifie dans ce cas), mais plutôt le minimum d'une propriété particulière ( ex. vitesse). Je l'ai vu l'utilisation de Collection.Min avec foncteurs. Y at-il quelque chose qui pourrait être fait là-bas? Ou avec LINQ? Je suis intéressé par tous les moyens. Merci, Dave

Question bonus (peut-être cela sera évident pour moi avec la réponse à min / max). Quelles sont les options pour décider si une valeur (comme la vitesse est déjà dans la collection). On ne sait pas de cet exemple, mais il pourrait être le cas que si vous avez déjà des données pour une variable indépendante donnée (temps par exemple), vous ne voulez pas plus. Donc, il y a quelque chose comme Collection.Contains ( « préciser la propriété qui vous intéresse »)?

Était-ce utile?

La solution

using System.Linq;

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

Voir aussi:
documentation MSDN LINQ
LINQ to Objects 5 minutes Vue d'ensemble

Autres conseils

Pour ajouter à la réponse de gaearon:

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

Voulez-vous obtenir le minimum. Mais vous auriez probablement pensé que sur votre propre;)

Vous pouvez jeter un oeil à ce lien sur le site de MSDN qui va plus trouver des valeurs max / min LINQ.

Pour répondre à votre question sur un « contains » type de méthode, vous pouvez utiliser la méthode Any si vous voulez une indication booléenne de son existence, ou vous pouvez utiliser FirstOrDefault pour trouver la première occurrence de EngineMeasurement qui satisfait la condition. Si elle existe, elle retourne l'objet réel, sinon il renvoie la valeur par défaut de cet objet (nul dans ce cas).

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top