Skip to main content

...

....

C# Snippet Tutorial - Dictionary Collections [Beginner]


So, we have all used arrays, and even sometimes a nice HashTable to get things sorted and organized. There are so many uses for an array, and even more for a nice HashTable. But, have you ever noticed that a HashTable is all objects? The Key in each Key/Value Pair is an Object, along with the value itself. But what happens if you don't need something so generic as an object? Well, you can get really specific and really crazy with a collection called Dictionary.

A dictionary is actually just another collection of Key/Value pairs, just like a HashTable, except that you declare a type for the Key and Value. These are any type you want. The Key or Value can be a primitive, array, enum, or even a struture. This can open the door for some pretty crazy code. An example of a useful and simple Dictionary would be something like:
Dictionary<int, string> newDict = new Dictionary<int,string>();
 
This is just a collection of Integer Keys and String Values, so you could add to this Dictionary with loop, like so:
for (int i = 0; i < 10; i++)
{
  newDict.Add(i, "String #" + i.ToString());
}
 
Just like a List or HashTable, you use the Add() method to add to a Dictionary, except that you have to provide a valid int and string for the arguments, or whatever types you set the Dictionary to be. Now say we want to get "String #3" from the collection, we simply go with:
Console.WriteLine(newDict[3]);

//Outputs String #3
 
So far we have done nothing that you can do with a List or HashTable, but what about a Dictionary that has a Color as a key and a string that holds a String representation of that color? Well, the code will look like this:
Dictionary<Color, string> colorStrings = new Dictionary<Color, string>();

colorStrings.Add(Color.Black, Color.Black.ToString());
colorStrings.Add(Color.Blue, Color.Blue.ToString());
colorStrings.Add(Color.Red, Color.Red.ToString());

foreach (KeyValuePair<Color, string> color in colorStrings)
{
  Console.WriteLine(color.Key.GetBrightness().ToString());
}

//Outputs: 0 0.5 0.5
 
The same result could have been achieved with an array of Color objects, but this example does show you the dictionary's strong point. When you get the key or value, you are given an actual Object of a specific type. With a HashTable, the Key and Value are just Objects, meaning they have no type and must be converted to something in order to be more than just that. With a dictionary, you can declare the Object types and get back useful Objects or those types, in this case a Color object or a string.

Dictionaries add a little more detailed aspect to the Collections of C#, allowing a specific type of key/value collection. When you know what you want, they are the way to go. And this just about wraps this this tutorial up.

Comments

Popular posts from this blog

C# Snippet - Shuffling a Dictionary [Beginner]

Randomizing something can be a daunting task, especially with all the algorithms out there. However, sometimes you just need to shuffle things up, in a simple, yet effective manner. Today we are going to take a quick look at an easy and simple way to randomize a dictionary, which is most likely something that you may be using in a complex application. The tricky thing about ordering dictionaries is that...well they are not ordered to begin with. Typically they are a chaotic collection of key/value pairs. There is no first element or last element, just elements. This is why it is a little tricky to randomize them. Before we get started, we need to build a quick dictionary. For this tutorial, we will be doing an extremely simple string/int dictionary, but rest assured the steps we take can be used for any kind of dictionary you can come up with, no matter what object types you use. Dictionary < String , int > origin = new Dictionary < string , int >();

C# WPF Printing Part 2 - Pagination [Intermediate]

About two weeks ago, we had a tutorial here at SOTC on the basics of printing in WPF . It covered the standard stuff, like popping the print dialog, and what you needed to do to print visuals (both created in XAML and on the fly). But really, that's barely scratching the surface - any decent printing system in pretty much any application needs to be able to do a lot more than that. So today, we are going to take one more baby step forward into the world of printing - we are going to take a look at pagination. The main class that we will need to do pagination is the DocumentPaginator . I mentioned this class very briefly in the previous tutorial, but only in the context of the printing methods on PrintDialog , PrintVisual (which we focused on last time) and PrintDocument (which we will be focusing on today). This PrintDocument function takes a DocumentPaginator to print - and this is why we need to create one. Unfortunately, making a DocumentPaginator is not as easy as

C# WPF Tutorial - Implementing IScrollInfo [Advanced]

The ScrollViewer in WPF is pretty handy (and quite flexible) - especially when compared to what you had to work with in WinForms ( ScrollableControl ). 98% of the time, I can make the ScrollViewer do what I need it to for the given situation. Those other 2 percent, though, can get kind of hairy. Fortunately, WPF provides the IScrollInfo interface - which is what we will be talking about today. So what is IScrollInfo ? Well, it is a way to take over the logic behind scrolling, while still maintaining the look and feel of the standard ScrollViewer . Now, first off, why in the world would we want to do that? To answer that question, I'm going to take a an example from a tutorial that is over a year old now - Creating a Custom Panel Control . In that tutorial, we created our own custom WPF panel (that animated!). One of the issues with that panel though (and the WPF WrapPanel in general) is that you have to disable the horizontal scrollbar if you put the panel in a ScrollV