2012-07-16 80 views
0

自定義函數說我有一個功能訂單列表C#與最佳性能

public float GetOBJECTActivity(OBJECT ob){ 

    // returns some float 
} 

和另一個函數裏面,我得到OBJECT(List<OBJECT>) 的名單,我想根據GetOBJECTActivity函數結果進行排序(降序升序)。

如何在C#中實現最佳性能?我會在我的項目中做很多類似的操作,我想確保我使用最快的方式和最優雅的方式。

感謝

+0

你到目前爲止嘗試過什麼?這是什麼情況?這是火箭科學還是隻是一個寵物項目?提供儘可能多的上下文總是更好,所以我們可以幫助你。 「我怎樣才能做到最佳」可以是非常主觀的。 – 2012-07-16 22:16:50

+0

嗯,我不想爲每個想做的比較做一個比較類。 – 2012-07-16 22:18:34

+0

只需製作1個比較器類,並將其用於所有比較 – 2012-07-16 22:19:33

回答

0

做一個Comparer,然後使用該比較器與List.Sort()

到現在爲止,讓你列表排序的最快和最優雅的方式,就是讓內置的功能做到這一點。

很多類型(浮點,字符串,整數)已經建立了comparers,所以如果你知道這些都是你要使用的唯一類型的,比你可以叫List.Sort()

+0

我不想爲每個想要執行的比較製作比較器類。 – 2012-07-16 22:19:04

+0

如果你覺得我不明白你的答案,詳細說明 – 2012-07-16 22:19:29

+0

@Saher我在你的回答中給了你2個鏈接。如果你只是'返回x.CompareTo(y)',你應該點擊它們 – 2012-07-16 22:20:41

0
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 
    }); 
+0

,那麼你甚至不需要比較器。 – 2012-07-16 22:22:08

+1

@SamIam請注意,x和y的類型是'float',而不是'OBJECT'。因此存在「CompareTo」。 – 2012-07-16 22:23:54

+0

我認爲lambda表達式就是我需要的。謝謝,我會嘗試 – 2012-07-16 22:25:42