2012-07-16 79 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