在C#中自定义排序Hashtable(不是通过键)

时间:2011-06-24 12:32:06

标签: c# collections hashtable

我需要通过添加到集合中的对象的属性对Hashtable中的数据进行排序。怎么做?我的项目使用.NET 2.0,所以我不能使用.NET 2.0运行时默认不起作用的任何功能(我可以使用一些适用于.NET 2.0的C#3.0功能而不添加引用任何新的dll)。添加到哈希表的所有对象都是相同的类型。如果我使用SortedList并将Hashtable传递给它(通过构造函数),那么它只按键进行排序,有没有办法将自定义排序逻辑传递给它?

4 个答案:

答案 0 :(得分:3)

如果您使用.NET 2.0,则可以使用IComparer。 http://codebetter.com/davidhayden/2005/02/27/implementing-icomparable-for-sorting-custom-objects/

如果要对某些内容进行排序,Hashtable肯定是错误的数据结构。

答案 1 :(得分:0)

@Snoopy说IComparer,这确实是你需要的。看看SortedDictionary

答案 2 :(得分:0)

查看哈希表的drawbacks。然后查看优势并确定您是否使用了正确的数据结构。如果您很少排序,那么您可能正在使用正确的数据结构。在这种情况下,排序将要求您枚举值并将它们放入列表中。如果频繁排序,请考虑转移到不同的数据结构,如search tree。如果您很少进行查找/搜索,我会考虑使用普通列表。

答案 3 :(得分:0)

如果您想坚持从Hashtable的内容创建排序列表,一个选项是编写IComparer的子类,根据需要重载Compare方法,并使用以下命令创建Sorted列表:

SortedList s = new SortedList( new MyIComparer() );

然后相应地将Hashtable的元素添加到列表中。