自定义函数说我有一个功能订单列表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