TUTORIAL

Hashtable Sorting

Posted by Prasoon Tutorials | C# Language August 31, 2008
This article gives you an idea for sorting a Hashtable.
Reader Level:

I have always seen developers (including myself) having difficulty in sorting a HashTable  based on keys or values. I thought of writing this article which may help to resolve issues regarding HashTable sorting.

Before moving forward, we need to understand that it is not possible to sort a Hashtable since the data is stored by the hashcode of the key, not by the index .

So to sort the data of a Hashtable, we need to have a sortable object like an array or an ArrayList.

To achieve this, first of all let's be clear about our requirement on following terms

  1. Sorting has to be done on Key or Value. 
  2. Sorting order

Once we are clear about these requirements, now we can proceed.

In my example, I will take that I have to sort my Hashtable on the basis of key in a order that say I have the following data:

April 08
March 08
Feb 08
.....

My final sorted order should be

April 08
March 08
Feb 08

My Hashtable has these months as keys and there is value which is associated with each of these keys that is a bonus.These key - value pair has to be displayed in a table in above said sorting order.

I will make an assumption here that my Hashtable is populated with correct values.

For Sorting this HashTable, I need to follow following listed steps in proper order:-

  1. First of all Create a method which take a Hashtable as a parameter.

    e.g .:-

    public void BuildTable(Hashtable myHashTable)
    {
    }

  2. Second step is to create an array. Here you have to decide certain things. If you want to sort your Hashtable on the basis of key, then create an array of that type else on the basis of value.

    In my case it is key and that too of datetime type.
    So I will first create a array of datetime.

    e.g.

    //  Get the count of ahshtable    
        int k = myHashTable.count;
     
    // Create a array of correct type with correct length  

    DateTime[] datesortedvalue = new DateTime[k];


               
    // Populate the array with correct keys.
          

    int i = 0;

    foreach (DictionaryEntry de in myHashTable)

    {

    datesortedvalue[i] = parseMonth(de.Key.ToString());

    i++;

    }

    Note if the criteria is Value and not Key, then use de.Value.ToString();

  3. Next step is to sort this array which is easily achievable as done in following code snippet by calling the Sort and Reverse methods of the Array object.

    Array.Sort(datesortedvalue);

    Array.Reverse(datesortedvalue);

  4. Next step is to display in table as was in my requirement. So basically I have to display it on the basis of Key and challenge was to fetch the correct value according to key. So I will do something like :-

    // Loop through all elements of Array :-

    for (int j = 0; j < k; j++)

              

    { 

       //Display Key Value which is in Sorted Array as follows:-

         

        dataRow.Cells[0].Text = DeparseTostring(datesortedvalue[j]);

     

     // Display the correct Value in accordance with Key :-

                foreach (DictionaryEntry de in hsHistory)

                   {

                       if ((de.Key.ToString() == DeparseTostring(datesortedvalue[j]))

                       {

     

                           dataRow.Cells[1].Text = de.Value.ToString();

     

                        }
    }

Note that in above example, I have created two methods parseMonth and DeparseTostring for converting string into month and vice-versa.

So after following above 4 steps we can sort an hashtable easily. Hope this helps everyone.

 

Login to add your contents and source code to this article
post comment
     

I had written a hash table in C++, it is much more faster than standard hash table, hash_strmap achieved 30,000,000 QPS for 32 bytes string keys! and it use less memory, it also support sort without any extra resources

Posted by peng lei May 10, 2012

Thanks, This artcale helped me a lot.it's was very difficult to sort hash table but after reading this article i was able to resolved the issue.thanks prasoon. could u send me the complete source code of the same.

Posted by Prasoon Kumar Sep 02, 2008

I think approach described in this article was really helpful. The four steps described are really helpful but wish if more code lines could have been added

Posted by Narasa Reddy Sep 02, 2008

I think approach described in this article was really helpful. The four steps described are really helpful but wish if more code lines could have been added

Posted by Narasa Reddy Sep 02, 2008

I think approach described in this article was really helpful. The four steps described are really helpful but wish if more code lines could have been added

Posted by Narasa Reddy Sep 02, 2008
COMMENT USING
PREMIUM SPONSORS
Over-C is a holistic consortium of communications and technology specialists. We build, deploy and market both business as well as consumer products and solutions.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Get Career Advice from Experts