An open API service indexing awesome lists of open source software.

https://github.com/softcircuits/ordereddictionary

.NET library that implements an ordered dictionary.
https://github.com/softcircuits/ordereddictionary

Last synced: 11 months ago
JSON representation

.NET library that implements an ordered dictionary.

Awesome Lists containing this project

README

          

# OrderedDictionary

[![NuGet version (SoftCircuits.OrderedDictionary)](https://img.shields.io/nuget/v/SoftCircuits.OrderedDictionary.svg?style=flat-square)](https://www.nuget.org/packages/SoftCircuits.OrderedDictionary/)

```
Install-Package SoftCircuits.OrderedDictionary
```

## Introduction

OrderedDictionary is a .NET library that implements an ordered dictionary. It provides all the functionality of `Dictionary` but also maintains the items in an ordered list. Items can be added, removed and accessed by key or index. For compatibility, the class implements the `IDictionary` and `IReadOnlyDictionary` interfaces.

## Examples

OrderedDictionary can be initialized used like any other dictionary. This includes initializing with *index initializers*.

```cs
OrderedDictionary dictionary = new()
{
[101] = "Bob Smith",
[127] = "Gary Wilson",
[134] = "Ann Carpenter",
[187] = "Bill Jackson",
[214] = "Cheryl Hansen",
};
```

Like a dictionary, items can by accessed by key. They can also be accessed using a 0-based index. Because it's possible for the key to be of type `int`, the `ByIndex` property is used to access an item using an index. This prevents any ambiguity between key and index values.

```cs
Assert.AreEqual("Gary Wilson", dictionary[127]);
Assert.AreEqual("Bill Jackson", dictionary.ByIndex[3]);
```

You can add items using the `Add()` method, and you can also insert them at a particular location.

```cs
OrderedDictionary dictionary = new();

dictionary.Add(101, "Bob Smith");
dictionary.Add(127, "Gary Wilson");
dictionary.Add(187, "Bill Jackson");
dictionary.Add(214, "Cheryl Hansen");

dictionary.Insert(2, 134, "Ann Carpenter");

Assert.AreEqual("Bob Smith", dictionary[101]);
Assert.AreEqual("Bob Smith", dictionary.ByIndex[0]);
Assert.AreEqual("Gary Wilson", dictionary[127]);
Assert.AreEqual("Gary Wilson", dictionary.ByIndex[1]);
Assert.AreEqual("Ann Carpenter", dictionary[134]);
Assert.AreEqual("Ann Carpenter", dictionary.ByIndex[2]);
Assert.AreEqual("Bill Jackson", dictionary[187]);
Assert.AreEqual("Bill Jackson", dictionary.ByIndex[3]);
Assert.AreEqual("Cheryl Hansen", dictionary[214]);
Assert.AreEqual("Cheryl Hansen", dictionary.ByIndex[4]);
```

Items can also be removed using either the key or index.

```cs
OrderedDictionary dictionary = new()
{
[101] = "Bob Smith",
[127] = "Gary Wilson",
[134] = "Ann Carpenter",
[187] = "Bill Jackson",
[214] = "Cheryl Hansen",
};

dictionary.Remove(134); // Removes 134 - Add Carpenter
dictionary.RemoveAt(2); // Removes 187 - Bill Jackson

Assert.AreEqual(5 - 2, dictionary.Count);
Assert.IsTrue(dictionary.ContainsKey(101));
Assert.IsTrue(dictionary.ContainsKey(127));
Assert.IsFalse(dictionary.ContainsKey(134));
Assert.IsFalse(dictionary.ContainsKey(187));
Assert.IsTrue(dictionary.ContainsKey(214));
```

You can also iterate through an `OrderedDictionary` using `foreach`.

```cs
foreach (KeyValuePair item in dictionary)
{
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}
```

To iterate the keys or values only, you can use the `Keys` or `Values` properies.

The library also defines the `ToOrderedDictionary()` extension method with several overloads for converting `IEnumerable<>`s to `OrderedDictionary<>`s.