我需要通过添加到集合中的对象的属性对Hashtable中的数据进行排序。怎么做?我的项目使用.NET 2.0,所以我不能使用.NET 2.0运行时默认不起作用的任何功能(我可以使用一些适用于.NET 2.0的C#3.0功能而不添加引用任何新的dll)。添加到哈希表的所有对象都是相同的类型。如果我使用SortedList并将Hashtable传递给它(通过构造函数),那么它只按键进行排序,有没有办法将自定义排序逻辑传递给它?
答案 0 :(得分:3)
如果您使用.NET 2.0,则可以使用IComparer。 http://codebetter.com/davidhayden/2005/02/27/implementing-icomparable-for-sorting-custom-objects/
如果要对某些内容进行排序,Hashtable肯定是错误的数据结构。
答案 1 :(得分:0)
SortedDictionary
。
答案 2 :(得分:0)
查看哈希表的drawbacks。然后查看优势并确定您是否使用了正确的数据结构。如果您很少排序,那么您可能正在使用正确的数据结构。在这种情况下,排序将要求您枚举值并将它们放入列表中。如果频繁排序,请考虑转移到不同的数据结构,如search tree。如果您很少进行查找/搜索,我会考虑使用普通列表。
答案 3 :(得分:0)
如果您想坚持从Hashtable的内容创建排序列表,一个选项是编写IComparer的子类,根据需要重载Compare方法,并使用以下命令创建Sorted列表:
SortedList s = new SortedList( new MyIComparer() );
然后相应地将Hashtable的元素添加到列表中。