# Dictionary

We used `List`s before which can collect many instances of a single type. Sometimes we want to store pairs of information like in a physical dictionary – every word has its meaning stored. So a physical dictionary can be described as a sequence of (`string`-`string`) pairs, where the first string is the word that you look up and the second string is the meaning of the word you look up:

```cs
var danish2English = new Dictionary<string, string>
{
    ["kro"] = "inn",
    ["djævel"] = "devil",
    ["tåge"] = "fog"
};

// Adding new items
danish2English["demontering"] = "disassembly";

// Reading an item
Console.WriteLine(danish2English["kro"]);

// Iterating
// Each item consists of a *key*-*value* pair.
foreach (var (word, meaning) in danish2English)
    Console.WriteLine($"The {word.Length} character word {word} means: {meaning}");

// In a class definition
public class Person
{
    public Dictionary<string, int> FoodScore = []; // Do not forget `[]`
}
```

:::{activity}
Based on {ref}`implementing-inheritance` implement the class `Inventory`, which has a data field called `stock` that tracks for each item the amount.

Use a `Dictionary` to store each item along with its amount.

Lastly, implement the method `List<Item> LowStockItems()` that returns the items low on stock. You could consider amounts less than five as low for simplicity.
:::

:::{warning}
If you use aggregate datatypes like `Dictionary` and `List` in a class definition, do not forget to initialize them using `[]`.
:::

## Related resources


- [Collections - key-value-pair collections](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/collections#keyvalue-pair-collections)
- [Deconstruct](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/deconstruct)