|
|
1
13
在保罗·福克斯的博客中,我推荐了“如何对一个伊利斯特人进行排序”这篇文章: http://foxsys.blogspot.com/2007/06/how-to-sort-generic-ilist.html 为了防止博客在将来消失,我将把文章复制到这里: 如何对通用IList排序 更新 你可以阅读和更新关于 sorting generic IList and List . 许多人更喜欢更新后的帖子中提到的方法。 对通用IList排序 我试图对一个通用的ilist进行排序,找到了一种相当简单的方法。 步骤1 需要为IList中包含的类型实现IComparable。对于这个例子,我将使用一个简单的语言DTO类。
步骤2 把你的髂骨分类。为此,您将使用arraylist.adapter()方法传入IList,然后调用sort方法。像这样…
注:语言类型为“ilist” 然后,语言应该是您类型的排序列表! |
|
|
2
6
您不能将ilist(t)强制转换为ilist。 在使用Reflector进行一些嗅探之后,看起来像array list.adapter(ilist.sort()将首先将列表复制到对象数组,对数组进行排序,然后将数组复制回列表:
如果列表(t)中的t是一个值类型,则可能会产生装箱开销。 如果需要更改列表中对象的顺序,可以类似地执行以下操作:
如果列表太大(比如在数亿个项目中),以至于您无法在内存中创建额外的副本,我建议首先使用列表(T),或者实现您最喜欢的就地排序算法。 |
|
|
3
1
由于sort方法不在ilist接口上,您可以考虑创建自己的方法:
通常,在方法中指定的参数类型应该是实际需要调用的成员的最小公分母。如果您确实需要调用sort()方法,那么您的参数应该定义该成员。否则,您可能应该将其加载到另一个可以执行您所需操作的对象中,例如:
这实际上应该非常快,几乎可以肯定比编写自己的自定义内联排序算法还要快。 |
|
|
4
0
我知道这不是.NET 2.0,但我非常喜欢Linq,我会尽可能地支持它:) 简单排序:
按多个条件排序:
这两个例子都来自 101 Linq Samples |
|
|
5
0
如果需要对不同类的列表(而不是IList)进行排序,而不需要为所有类创建单独的比较器类,并且仍保持实体类的干净(不希望实现IComparable),则可以使用以下内容(与.NET 2.0兼容):
如果使用.NET 2.0(在上找到),还需要func委托 Replacing Func with delegates C# ):
用途:
一些简单的单元测试:
|
|
|
6
-3
这将给出对象特定字段的排序列表。 |