Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Photos | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » C# Language » Working with HashTable in C# 2.0

Working with HashTable in C# 2.0

Many a times we need to store more than one dimension data in a list and data may not be an integer or string. This article shows how to use HashTable class to store object type data.

Total page views :  304540
Total downloads : 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
Become a Sponsor

This is a 3 part tutorial on the HashTable available in .NET 2.0. Part one is here and soon you will get access of  other two part might be some brain storming sessions in the last one. Please download the attached code to see the working sample. 

 

First of all Why HashTable? Answer is very simple. Suppose you have some data, which needs to be stored in two dimensional array and have a link format of Key and Value. For example, a person name and his social security number and we can access there data using a key.

 

A close friend of Hashtable is Array (came from C/C++), it is an instance of System.Array class, but to access data from array you must have an index and that is of int Type. And second you must specify the size of the Array at the time of instantiations.

 

Family contains

  1. ArrayList
  2. Collection
  3. Dictionary ( Hashtable or Maps ).

Dictionaries or Hashtable

Are very sophisticated data structures that allows us to access an element based on some key, which can be of any type.

 

Hashtable in .net

  1. Is member of System.Collections namespace.
  2. Contains15 constructors ( wow, try them all) but you will mostly use.    

        Hashtable _table = new Hashtable(); //Default one

        Hashtable _table2 = new Hashtable(10); // capacity or size.
        Hashtable _table3 = new Hashtable(10, 06); //capacity , loadfactor

Loadfactor this factor helps a lot if you looking for performance, The smaller the load size (fracton of the tashtable full .6 measn 60% full) , the more efficiently our hash table works and the more memory it occupy.           

 

Now have some code

  1. Create a Hashtable 
          

    Hashtable _simpleTable = new Hashtable();

  2. Add some data in it.
        

         _simpleTable.Add("Key1", "Value1");

    _simpleTable.Add("Key2", "Value2");
  3. Get the size.

    _simpleTable.Count; // an int value.

  4.  Now to fetch data
  • Create an object of IDictonaryEnumerator , this is an interface that creates an enumerator and customized for    Dictonary  objects.
        
    IDictionaryEnumerator
    _enumerator = _simpleTable.GetEnumerator();
  • while (_enumerator.MoveNext())
    {
       _string += _enumerator.Key + " "
    ;
       _string += _enumerator.Value + "\n"
    ;
    }
  • and that all you fetched the Data !!!
  • clear hash table.. 

    _simpleTable.Clear();
  • Search for a specific key : remember its value type when used 

    if (_simpleTable.ContainsKey("Key1"))
    {
        
    Console.WriteLine("Key1 is present");
    }

  • Search for a specific key : remember its value type when used

    if (_simpleTable.ContainsValue("Value1"))
    {
         Console.WriteLine("Value1 is present"
    );
    }

  •  Have all this done and you will get more stuff in the next post.

  •  Try this and Cheers!!!!!


Login to add your contents and source code to this article
 About the author
 
Pradeep Tiwari
Working at e-Zest solutions Pvt Ltd(www.e-Zest.net/)
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010 Professional
Microsoft Visual Studio 2010 Professional will launch on April 12, but you can beat the rush and secure your copy today by pre-ordering at the affordable estimated retail price of $549 (US). Pre-order now.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Developer-Ready ASP.NET 2.0 Web Hosting with 3 MONTHS FREE
Now supporting .NET 3.0 Framework with Windows Workflow Foundation, Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), windows CardSpace (WCS)! Providing more flexibility for Developers with Web Services Support and a User/Permission Manger. Also supporting MS SQL 2005/2000 with Real-Time Backups, FREE Automated Attach .MDF Tool, FREE SQL Restore and Shrink SQL DB Tools, and SQL
 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
Become a Sponsor
 Comments
Same here by mi On March 2, 2007
I know the result because I have ran into the same situation before -- which is the reason I'm here. Do you have any suggestions how to deal with this situation? I tried to re-instantiate a hashtable -- only to find that the new hashtable I created has the same data I meant to disregard. It has been more than a headache to me. Thanks very much
Reply | Email | Delete | Modify | 
how to get a value of hash table in windows applications by anand On April 9, 2007
hi... after sorting the hash table values,how i can get that values and the corresponding keys... thanks in advance...
Reply | Email | Delete | Modify | 
hash tables by anand On April 11, 2007
hi sir, i stored some key and values in hash tables...after that i print these values it will display randomly...how these values are stored in hash tables... thanks and regards, P.Anand B.E.,
Reply | Email | Delete | Modify | 
Re: hash tables by Pradeep On May 17, 2007

u can`t sort the value in the hashtable, there is no such function.

best way u can create a function which will sort ur hashtable values according to ur choice

1. according to key

2. according to value.

 

and second option is transform ur hashtable into 2D generic object which is derived from IEquatable,

 

thanks

Pradeep

Reply | Email | Delete | Modify | 
Re: Re: hash tables by Gavril On October 24, 2007

Sorting a hashtable is confusing.

The way hashtables are designed is so they can be accessed very fast (in O(1) actually). But the key-value pairs will NOT be accessed in the same order as they are added.

Example:

//add 3 keys

hash.Add("txt","notepad");

hash.Add("pdf","acrobat");

hash.Add("mp3","winamp");

//iterate

(foreach DictionaryEntry de in hash)  // print key - value

will print the key-value pairs in a non-predictable order.

You may want to read about hashing in more detail, it is a basic of computer science.

If you need to sort your hash - don't use a hash - use a dictionary! (it's slower to access - O(n)).

Reply | Email | Delete | Modify | 
how to modify an enumerator by taimoor On April 21, 2009
private static Hashtable usrtm = Hashtable.Synchronized(new Hashtable()); lock (usrtm.SyncRoot) { usrtm.Add(val2, (object)DateTime.Now); System.Threading.Thread.Sleep(1000); } lock (usrtm.SyncRoot) { foreach (string s in usrtm.Keys) //here i receive an exception collection modified enumeration operation can't be performed { if (s == st1) { usrtm[s] = (object)DateTime.Now; MessageBox.Show("in receive"); } } }
Reply | Email | Delete | Modify | 
Hashtable to Array by Japan On June 9, 2009
Suppose I have a hashtable like below
{"a":0,"a":1,"a":2,"a":3,"a":4}

now I want a int[] = {0,1,2,3,4} from the above hashtable.

without having for loop can we do it by some another way????

thanks
Reply | Email | Delete | Modify | 
Re: Hashtable to Array by Pradeep On June 10, 2009

see this code,  is this you are looking for. 

static void Main(string[] args)

{

Hashtable ht = new Hashtable();

ht.Add("India", "new delhi");

ht.Add("Pak", "Ishalamabad");

ht.Add("China", "Bejing");

ICollection icol = ht.Values;

ArrayList list = new ArrayList();

list.AddRange(icol);

string[] str = list.ToArray(typeof(System.String)) as string[];

}



 

Reply | Email | Delete | Modify | 
Re: Re: Hashtable to Array by Japan On June 11, 2009
yes

thanks dude...
Reply | Email | Delete | Modify | 
Re: Hashtable to Array by Pradeep On June 10, 2009

static void Main(string[] args)

{

Hashtable ht = new Hashtable();

ht.Add("India", "new delhi");

ht.Add("Pak", "Ishalamabad");

ht.Add("China", "Bejing");

ICollection icol = ht.Values;

ArrayList list = new ArrayList();

list.AddRange(icol);

string[] str = list.ToArray(typeof(System.String)) as string[];

}

Reply | Email | Delete | Modify | 
Re: Re: Hashtable to Array by Bruce On November 5, 2009

This worked for me and copied directly from the hashtable  an appropriate array:

Hashtable ht1 = new Hashtable();

ht1.Add(1, "New Delhi");

ht1.Add(2, "Ishalamabad");

ht1.Add(5, "Bejing");

//get count for ht1

Console.WriteLine("count = {0}", ht1.Count);

//create string array using ht1.Count

string[] list1 = new string[ht1.Count];

//copy ht1.Values to array list1

ht1.Values.CopyTo(list1, 0);

//display eash string item in list1

foreach (string obj in list1)

Console.WriteLine("{0}", obj);

//create int array using ht1.Count

int[] list2 = new int[ht1.Count];

//copy ht1.Keys to array list2

ht1.Keys.CopyTo(list2, 0);

//display each int item in list2

foreach (int obj in list2)

Console.WriteLine("{0}", obj);

I am using C# 2008 Express Edition

Reply | Email | Delete | Modify | 
Good One. Please help me... by Shibu On June 11, 2009
I created a HashTable. Each element or index of HashTable item is a reference to other object. Next step, I removed the index from HashTable using its property. But here the problem is only the reference is deleted but the Object still exists in memory. How to deletethat memory location?

Thanks
Shibu Mathew
Reply | Email | Delete | Modify | 
Hash Tables by Bruce On November 5, 2009
I found this helpful.  How do I find the other two articles in the tutorial?
Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 2010  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.