Is it possible to sort a HashTable?

两盒软妹~` 提交于 2019-12-01 13:59:25

问题


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. Code:

    /// <summary>
    /// All content containers.
    /// </summary>
    public Hashtable Containers
    {
        get
        {
            Hashtable tbl = new Hashtable();
            foreach (Control ctrl in Form.Controls)
            {
                if (ctrl is PlaceHolder)
                {
                    tbl.Add(ctrl.ID, ctrl);
                }
                // Also check for user controls with content placeholders.
                else if (ctrl is UserControl)
                {
                    foreach (Control ctrl2 in ctrl.Controls)
                    {
                        if (ctrl2 is PlaceHolder)
                        {
                            tbl.Add(ctrl2.ID, ctrl2);
                        }
                    }
                }
            }

            return tbl;
        }
    }

回答1:


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.




回答2:


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>.




回答3:


lubos is right: you can't sort a HashTable. If you could, it wouldn't be a HashTable. You can enumerate the HashTable, and then sort the enumeration. But that would be very slow. Much better to use a SortedDictionary instead.




回答4:


Sorry, but you can't sort hashtable. You will have to refactor your code to use some sortable collections.




回答5:


I am quite sure that hash tables cannot be sorted ... ;)

Wikipedia Hash Table




回答6:


You will need to return something other than a hash table. I won't reiterate what you claim to understand already, but you need to rethink whatever part of your design requires you to return sorted objects in a hash table.




回答7:


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.




回答8:


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.




回答9:


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.




回答10:


I am a new programmer so take everything I say with a grain of salt. But here is what I did when I ran into a similar situation. I created a class that had two variables and then created a List object off those variables and then I used linq to sort those variables.




回答11:


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



来源:https://stackoverflow.com/questions/675759/is-it-possible-to-sort-a-hashtable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!