2010-09-29 23 views
4

鑑於從微軟例如下面的代碼(屬性)集合的最小值:發現在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; } 
} 

我如何獲得的最小/最大速度或轉矩或功率。我需要這個來設置我正在做的圖表上的比例尺(WPF工具包圖表)。 我想我可以在EngineMeasurementCollection中有一個方法,它遍歷每個EngineMeasurement並查看Power(或Speed),但我懷疑有一種更簡單的方法?類集合確實有某種Min方法,但是請注意,我並沒有試圖獲得集合的最小值(我不確定這是什麼意思),而是一個特定屬性的最小值(例如速度)。我確實看到了使用函子Collection.Min。那裏有什麼可以做的嗎?或者與Linq?我對所有方面都感興趣。 謝謝, 戴夫

獎金的問題(也許這將是明顯的我與最小/最大的答案)。有什麼選擇來決定一個值(例如Speed是否已經在集合中)。從這個例子中不清楚,但可能是這樣的情況,如果你已經有了一個給定的自變量的數據(例如時間),那麼你就不再需要了。那麼有沒有像Collection.Contains(「指定你感興趣的屬性」)?

回答

2

爲了增加gaearon的回答是:

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

,會得到最低限度。但你可能會想出你自己的;)

你可以看看this link on MSDN's site它會發現最大/最小值使用linq。

2

要回答你的問題有關「包含」方法的類型,你可以使用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);