In this article, you will learn how to build a three-dimensional Dictionary structure in C#.
Suppose we need to build a collection of Postal Codes in which each postal code contains a collection of Cities. Each City is itself a collection of Street Addresses and each Street contains all the residents and their personal records. We are going to make this whole collection with a Dictionary collection which is one of the best data structures for the purpose of searching efficiency. So our "Three dimensional dictionary collection" will look like:
Postal Code -> City –> Street Addresses -> Resident's Records -> SSN, Name, Age, Gender and Occupation
In C#, we can implement the preceding collection in the following way:
class ThreeDimensionalDictionaryDemo
{
public Dictionary<string, Dictionary<string, Dictionary<string, List<ResidentRecord>>>> PeopleCollection = new Dictionary<string, Dictionary<string, Dictionary<string, List<ResidentRecord>>>>();
public void AssemblePersonRecordByPostalCode()
{
try
{
// A data record file "RecordsFile.txt" is read.
StreamReader oStreamReader = new StreamReader("RecordsFile.txt");
string line;
string postalCode;
string city;
string streetAddress;
ResidentRecord oRecord;
while ((line = oStreamReader.ReadLine()) != null)
{
// In records file, we keep one person's record in one line and data fields are seperated by TAB
// For example:
// 933467543 John Smith 24 Male Business 21093 Timonium 2311 York Rd Suit # 44
string[] parsedItem = line.Split('\t');
// Retrieving data fields
oRecord.SSN = parsedItem[0];
oRecord.Name = parsedItem[1];
oRecord.Age = Convert.ToInt16(parsedItem[2]);
oRecord.Gender = parsedItem[3];
oRecord.Occupation = parsedItem[4];
postalCode = parsedItem[5];
city = parsedItem[6];
streetAddress = parsedItem[7];
// If we get an already existing Postal Code
if (PeopleCollection.ContainsKey(postalCode))
{
// If we get an already existing City
if (PeopleCollection[postalCode].ContainsKey(city))
{
// If we get an already existing StreetAddress
if (PeopleCollection[postalCode][city].ContainsKey(streetAddress))
{
// Person's record is added into list
PeopleCollection[postalCode][city][streetAddress].Add(oRecord);
}
// If we get a new StreetAddress
else
{
// Street Address is added and value part is newed up
PeopleCollection[postalCode][city].Add(streetAddress, new List<ResidentRecord>());
// Person's record is added into list
PeopleCollection[postalCode][city][streetAddress].Add(oRecord);
}
}
// If we get a new city
else
{
// City is added and value part is newed up
PeopleCollection[postalCode].Add(city, new Dictionary<string, List<ResidentRecord>>());
// Street Address is added and value part is newed up
PeopleCollection[postalCode][city].Add(streetAddress, new List<ResidentRecord>());
// Person's record is added into list
PeopleCollection[postalCode][city][streetAddress].Add(oRecord);
}
}
// If we get a new postal code
else
{
// Postal code is added and value part is newed up
PeopleCollection.Add(postalCode, new Dictionary<string, Dictionary<string, List<ResidentRecord>>>());
// City is added and value part is newed up
PeopleCollection[postalCode].Add(city, new Dictionary<string, List<ResidentRecord>>());
// Street Address is added and value part is newed up
PeopleCollection[postalCode][city].Add(streetAddress, new List<ResidentRecord>());
// Person's record is added into list
PeopleCollection[postalCode][city][streetAddress].Add(oRecord);
}
}
}
catch (Exception e)
{
throw e;
}
}
}
Thanks,
Hemant Srivastava