I have a property that returns a HashTable
. I would like to sort it without refactoring my property. Please note: I do not want to return another type.
Another option is to construct the hash table as you're already doing, and then simply construct a sorted set from the keys. You can iterate through that sorted key set, fetching the corresponding value from the hash table as needed.
You can also use DataView to sort the Hashtable. Here is an article that I wrote 5 years ago: http://www.codeproject.com/Articles/37039/Sorting-Hashtable
Not exactly a C# answer but I am sure you can make something of it.
In Perl it is common to "sort" a hash table for use in output to the display.
For example:
print "Items: ";
foreach (sort keys %items) {
print $_, '=', $items{$_}, ' ';
}
The trick here is that Perl doesn't sort the hash, it is sorting a copied list of hash keys. It should be easy enough in C# to extract the hash keys into a list and then sort that list.
Of course hash tables can be sorted, but you need to first define what it means to sort a hash table. (Therein lies the issue)
Once you have done that, however, you've invariably removed all the advantages that a hashtable can give you, and you might as well use a sorted array (with binary searching), or use a red-black tree instead.
Hashtables work by mapping keys to values. Implicit in this mapping is the concept that the keys aren't sorted or stored in any particular order.
However, you could take a look at SortedDictionary<K,V>.
There is no point in sorting a hash table because you already have almost constant lookup time. Or at worst O(B) where B is the bucket size.