# ToLookup

Okay, so what is ToLookup and how do you use it? The ToLookup operation can be thought of as a list with lookup capabilities. Similar to a Dictionary but the one advantage that it can contain duplicate keys. Duplicate keys!? What? Yes, duplicate keys. In a standard Dictionary, you can't have duplicate keys, otherwise, it will blow up. Whereas in a Lookup, you can. Why might this be useful? Well, the example below may illustrate.

# Basic example

Here we have a list of people with Name, Gender and City properties. Now, let's say we want to look at people's names by cities. What we can do is specify the lookup key as the city, arg => arg.City and the value will be arg => arg.Name

If you notice there are three people from London and one person from Paris. When we call lookup["London"] we will get three names, Vernon, Carrie and Joanna. When we call lookup["Paris"] we will get just Thomas.

Live example: https://dotnetfiddle.net/LbWPIH

var people = new[]
    {
        new
            {
                Name = "Vernon",
                Gender = "Male",
                City = "London",

            },
        new
            {
                Name = "Carrie",
                Gender = "Female",
                City = "London"
            },
            new
            {
                Name = "Joanna",
                Gender = "Female",
                City = "London"
            },
        new
            {
                Name = "Thomas",
                Gender = "Male",
                City = "Paris"
            }
    };


ILookup<string, string> lookup = people.ToLookup(arg => arg.City, arg => arg.Name);

IEnumerable<string> peopleInLondon = lookup["London"];
IEnumerable<string> peopleInParis = lookup["Paris"];

// output:

// People in London
// Vernon
// Carrie
// Joanna

// People in Paris
// Thomas