2010-09-29 5 views
4

Vu le code suivant à partir d'un exemple Microsoft:Trouver des valeurs minimales de (propriétés) collections en C#

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. J'ai besoin de cela pour définir l'échelle sur un graphique que je fais (WPF Toolkit Chart pour être précis). Je suppose que je pourrais avoir une méthode dans EngineMeasurementCollection qui itère à travers chaque EngineMeasurement et regarde Power (ou Speed), mais je suppose qu'il y a un moyen beaucoup plus facile? La collection de classe a une sorte de méthode Min, mais notez que je n'essaie pas d'obtenir le minimum de la collection (je ne suis pas sûr de ce que cela signifie dans ce cas), mais plutôt le minimum d'une propriété particulière (ex. Vitesse). J'ai vu l'utilisation de Collection.Min avec des foncteurs. Y a-t-il quelque chose qui pourrait être fait là? Ou avec Linq? Je suis intéressé par tous les moyens. Merci, Dave

Question en prime (peut-être que cela sera évident pour moi avec la réponse à min/max). Quelles sont les options pour décider si une valeur (telle que Speed ​​est déjà dans la collection). Ce n'est pas clair à partir de cet exemple, mais cela pourrait être le cas si vous avez déjà des données pour une variable indépendante donnée (le temps par exemple), vous n'en voulez plus. Y a-t-il quelque chose comme Collection.Contains ("spécifier la propriété qui vous intéresse")?

Répondre

2

Pour ajouter à la réponse de gaearon:

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

Est-ce que vous obtenez le minimum. Mais vous auriez probablement compris cela par vous-même;)

Vous pouvez jeter un oeil à this link on MSDN's site qui va plus loin trouver des valeurs max/min en utilisant linq.

2

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 EngineMeasurement qui satisfait la condition. S'il existe, il retournera l'objet réel, sinon il retournera la valeur par défaut de cet objet (null 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); 
Questions connexes