How to Design Collections Allowing Duplicate Keys?

To design a data structure that can hold key-value pairs with a possible duplicate keys, we can go with one of the following.

By design, a Dictionary needs unique key elements, with no possibility for inclusion of duplicate keys. However, when we need a data structure capable of accommodating key-value pairs with the possibility of duplicate keys, we need to look for alternative approaches.

We can explore options such as utilizing a custom class to encapsulate both key and value, employing a List of KeyValuePair objects, or considering specialized data structures like a Lookup to handle scenarios where duplicate keys are permissible.

Each of these strategies offers different advantages based on the specific requirements of the use case.

A List of Key Value Pairs

we maintain a List of Key Value pairs and since a List doesn’t have a key concept, we can still store key values for duplicate keys.

var a = new List<KeyValuePair<char, C>>();
a.Add(new KeyValuePair<char, C>('c', new C
{
    Id = 1001,
    Name = "Diippop",
    AddedOn = DateTime.Now
}));

A Dictionary that stores a collection

we can push the values that come in for a key into a collection and still maintain a unique key.

var d= new Dictionary<char, List<C>>();
d.Add('c', new List<C>());
d['c'].Add(new C
{
    Id = 1001,
    Name = "Diippop"
});

Using a LINQ Lookup

a data structure available from the System.Linq namespace which stores a grouping of values for a defined Key. The Lookup can then be looked up for a key with constant time and the value collection can be iterated.

var a = new List<C>()
{
    new C
    {
        Id = 1001,
        Name = "Diippop"
    },
    new C
    {
        Id = 1002,
        Name = "Diippop"
    }
};
var lookup = a.ToLookup(x => x.Name.Substring(0, 1), x => x.Id);
foreach (var e in lookup)
{
    Console.WriteLine(
quot;Key: {e.Key}");
foreach (var k in e)
{
Console.WriteLine(k);
}
}
Output:
Key: D
1001
1002
Ram
Ram

I'm a full-stack developer and a software enthusiast who likes to play around with cloud and tech stack out of curiosity. You can connect with me on Medium, Twitter or LinkedIn.

Privacy Overview
Referbruv

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

Strictly Necessary Cookies

Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.

3rd Party Cookies

This website uses Google Analytics to collect anonymous information such as the number of visitors to the site, and the most popular pages.

Keeping this cookie enabled helps us to improve our website.