Download the Source Code
In this article we discuss the C# object known as a SortedList. The sortedList
object is part of the System.Collections namespace and is inherited from IList.
When do you want to use a sorted list? Anytime you have an array of key value
pairs that would be beneficial for you to have the keys sorted would be a good
time to use the sorted list.
You need to be aware that you can have only one instance of each key. The sort
is not on the combination of the key-value but of just the key.
The steps to be aware of include adding the System.Collections namespace to
your using statements. Adding key value pairs to the sorted list. And accessing
the SortedList object with a foreach loop or a specific key.
First step is to create a solution and then a new project within that solution.
I named my project SortMyList.
On WebForm1.aspx add a ListBox object and name it lbKeyValue. We will display
the key value pairs we create within this ListBox.
Drag two label controls and two TextBox controls onto the form. For Label1
change the Text Property to Key and for Label2 change the Text Property to
Value.
For the TextBox objects give one an ID of txtKey and the other an ID of
txtValue and place them under the label objects.
Drag and Drop one button control onto the form. The ID will be btnAdd with a
Text property of Add.
The general idea is you will type in your key value pair and click on the add
button to add them to our sorted list. You can just as easily type in a few key
value pairs and then enter them all at one time within the code, but we are
going to do it like this for now.
Go to the code for the form and place the following code within the class as we
add an instance of a SortedList object. We only want one SortedList object.
This is a good time to make sure you have a using statement for the System.Collections
namespace. Placed in the using section of the code above the class declaration.
using System.Collections;
Double Click the ADD button so we can place some C# code behind for the form.
Place the following code within the click event of the Add button.
string key = string.Empty;
string values = string.Empty;
//If key value is null then terminate the insertion
//into the SortedList
if (txtKey != null)
{
key = txtKey.Text.ToString();
values = txtValue.Text.ToString();
sortList.Add(key.ToString(),values.ToString());
}
ShowList();
First we are creating a string (key) and setting the string to an empty string
or blank. We also do the same with the values string.
Next we will read the txtKey.Text field and check to see if it is a null value.
If so we don't want to do anything. If it has a value then full steam ahead.
We read the txtKey.Text value and place it into our key string. It is okay if
the txtValue field contains a null which we assign to the values string.
Then we add the values read from our text fields into our SortedList object.
Following that step we need to display the SortedList in our ListBox, so we
will create a method called ShowList that shows our sorted list.
private void ShowList()
{
lbKeyValue.ClearSelection();
//You need the IDictionaryEnumerator object to
//iterate thru the SortedList object
IDictionaryEnumerator ide = sortList.GetEnumerator();
//Now you have a DictionaryEntry object that allows
//you to iterate and get all the key value pairs.
foreach (DictionaryEntry key in sortList)
{
lbKeyValue.Items.Add(key.Key.ToString() + " " + key.Value.ToString());
}
}
ShowList is fairly simple. We clear out any previous values in our ListBox
object with lbKeyValue.ClearSelection().
Then we assign our SortedList object to an IDictionaryEnumerator object. This
allows us to iterate through the SortedList object using GetEnumerator(). Now
we have a collection and can use the foreach keyword to walk through the
collection getting the key and value for each entry in our SortedList.
Now you are ready to run the program. Build and then run. Type in a value in
the "key" text box. Type in another value in the "value" text box and click on
the Add button. The information you entered in the text boxes should display in
the ListBox.
Type in another key value combination and click on the Add button and another
entry should show in the ListBox. Depending on the version of the .Net
framework you are using the list you display should be sorted by key. I am
running Windows XP with version 1.0 and my list is not sorting by key. But when
I run the same program on a Windows 2000 box with .Net framework 1.1, then the
list is sorted by key and does not allow me to add duplicate keys.
Another way to walk through the collection is by using a while statement shown
in the following method.
private void ShowSortedList()
{
lbKeyValue.ClearSelection();
//You need the IDictionaryEnumerator object to
//iterate thru the SortedList object
IDictionaryEnumerator ide = sortList.GetEnumerator();
while (ide.MoveNext())
{
lbKeyValue.Items.Add(ide.Key.ToString() + " " + ide.Value.ToString());
}
}
This sample follows the same concept, still need to assign the sorted list to a
DictionaryEntry object, but we use the while statement to iterate through the
key value pairs.
Basically, as long there is another member of the SortedList then you can
MoveNext and get to the next record. When there is no more records then you
exit out of the while loop.
There is also the Current command to get the current record. The Reset command
which resets the SortList to the first record.
The ContainsKey() command allows you to only go into the SortedList if it
contains a certain Key. If there is no key with the specific word requested,
then the method returns false.
if (sortList.ContainsKey("Bing"))
{
while (ide.MoveNext())
{
lbKeyValue.Items.Add(ide.Key.ToString() + " " + ide.Value.ToString());
}
}
This was a little primer on the SortedList object. It can prove useful when you
have Key value pairs and you want the keys sorted and then you want to get at
specific members of the key value pairs. It is part of the System.Collections
namespace and is inherited from IList.