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.
- Host: GitHub
- URL: https://github.com/softcircuits/ordereddictionary
- Owner: SoftCircuits
- License: mit
- Created: 2020-03-06T22:15:55.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-03-31T20:00:27.000Z (about 2 years ago)
- Last Synced: 2024-11-07T12:18:12.016Z (over 1 year ago)
- Language: C#
- Size: 75.2 KB
- Stars: 11
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: License.txt
Awesome Lists containing this project
README
# OrderedDictionary
[](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.