自定義函數說我有一個功能訂單列表C#與最佳性能
public float GetOBJECTActivity(OBJECT ob){
// returns some float
}
和另一個函數裏面,我得到OBJECT(List<OBJECT>
) 的名單,我想根據GetOBJECTActivity
函數結果進行排序(降序升序)。
如何在C#中實現最佳性能?我會在我的項目中做很多類似的操作,我想確保我使用最快的方式和最優雅的方式。
感謝
自定義函數說我有一個功能訂單列表C#與最佳性能
public float GetOBJECTActivity(OBJECT ob){
// returns some float
}
和另一個函數裏面,我得到OBJECT(List<OBJECT>
) 的名單,我想根據GetOBJECTActivity
函數結果進行排序(降序升序)。
如何在C#中實現最佳性能?我會在我的項目中做很多類似的操作,我想確保我使用最快的方式和最優雅的方式。
感謝
做一個Comparer,然後使用該比較器與List.Sort()
到現在爲止,讓你列表排序的最快和最優雅的方式,就是讓內置的功能做到這一點。
很多類型(浮點,字符串,整數)已經建立了comparers,所以如果你知道這些都是你要使用的唯一類型的,比你可以叫List.Sort()
我不想爲每個想要執行的比較製作比較器類。 – 2012-07-16 22:19:04
如果你覺得我不明白你的答案,詳細說明 – 2012-07-16 22:19:29
@Saher我在你的回答中給了你2個鏈接。如果你只是'返回x.CompareTo(y)',你應該點擊它們 – 2012-07-16 22:20:41
static int MyActivityComparison(OBJECT a, OBJECT b)
{
float x = GetOBJECTActivity(a);
float y = GetOBJECTActivity(b);
// ascending
return x.CompareTo(y);
// descending
// return y.CompareTo(x);
}
list.Sort(MyActivityComparison);
或者用lambda表達式,如果你不想定義一個獨立的函數:
list.Sort((a, b) =>
{
float x = GetOBJECTActivity(a);
float y = GetOBJECTActivity(b);
return x.CompareTo(y); // ascending
// return y.CompareTo(x); // descending
});
,那麼你甚至不需要比較器。 – 2012-07-16 22:22:08
@SamIam請注意,x和y的類型是'float',而不是'OBJECT'。因此存在「CompareTo」。 – 2012-07-16 22:23:54
我認爲lambda表達式就是我需要的。謝謝,我會嘗試 – 2012-07-16 22:25:42
你到目前爲止嘗試過什麼?這是什麼情況?這是火箭科學還是隻是一個寵物項目?提供儘可能多的上下文總是更好,所以我們可以幫助你。 「我怎樣才能做到最佳」可以是非常主觀的。 – 2012-07-16 22:16:50
嗯,我不想爲每個想做的比較做一個比較類。 – 2012-07-16 22:18:34
只需製作1個比較器類,並將其用於所有比較 – 2012-07-16 22:19:33