AlastairLundy.DotPrimitives.Collections
2.1.0
Prefix Reserved
See the version list below for details.
dotnet add package AlastairLundy.DotPrimitives.Collections --version 2.1.0
NuGet\Install-Package AlastairLundy.DotPrimitives.Collections -Version 2.1.0
<PackageReference Include="AlastairLundy.DotPrimitives.Collections" Version="2.1.0" />
<PackageVersion Include="AlastairLundy.DotPrimitives.Collections" Version="2.1.0" />
<PackageReference Include="AlastairLundy.DotPrimitives.Collections" />
paket add AlastairLundy.DotPrimitives.Collections --version 2.1.0
#r "nuget: AlastairLundy.DotPrimitives.Collections, 2.1.0"
#:package AlastairLundy.DotPrimitives.Collections@2.1.0
#addin nuget:?package=AlastairLundy.DotPrimitives.Collections&version=2.1.0
#tool nuget:?package=AlastairLundy.DotPrimitives.Collections&version=2.1.0
DotPrimitives.Collections
A collection primitives/utilities library for .NET.
Supported TFMs: .NET Standard 2.0, .NET Standard 2.1, .NET 8.0, .NET 9.0
Features
CachedEnumerable
Caches an IEnumerable's values for inexpensive re-use when required.RefreshableCachedEnumerable
LikeCachedEnumerable
, but allows cache invalidation, along with the ability to update the cache.HashMap<TKey, TValue>
A type that provides an API similar to Java's HashMap but usesDictionary<TKey,TValue>
under the hood.GroupByEnumerable<TKey, TElement>
Deferred grouping of a sequence by key without intermediate collections.
Getting Started
Install via NuGet:
dotnet add package AlastairLundy.DotPrimitives.Collections
Usage Examples
using AlastairLundy.DotPrimitives.Collections.Groupings;
using AlastairLundy.DotPrimitives.Collections.HashMaps;
using AlastairLundy.DotPrimitives.Collections.CachedEnumerables;
// CachedEnumerable
var source = Enumerable.Range(1, 5);
var cached = new CachedEnumerable<int>(source);
foreach (var x in cached) Console.WriteLine(x); // Source is enumerated once
foreach (var x in cached) Console.WriteLine(x); // Call the cached results without enumerating the IEnumerable again!
// RefreshableCachedEnumerable
var refreshable = new RefreshableCachedEnumerable<int>(source);
source = source.Select(x => x + 1);
// Refresh the cache when the IEnumerable<T> contents changes.
refreshable.RefreshCache(source);
// Then call the cached results whilst avoiding multiple enumeration!
foreach (var x in refreshable) Console.WriteLine(x);
// HashMap
var map = new HashMap<string, int>();
map.Put("apple", 3);
map.GetValueOrDefault("apple", 0);
// GroupByEnumerable
var items = new[] { ("a", 1), ("b", 2), ("a", 3) };
var groups = new GroupByEnumerable<string, (string, int)>(
items, item => item.Item1, item => item.Item2
);
foreach (var group in groups)
{
Console.WriteLine($"Key: {group.Key}");
foreach (var value in group) Console.WriteLine($" {value}");
}
License
This project is licensed under the Mozilla Public License 2.0.
See the LICENSE text for more details.
Acknowledgements
Thanks to the following projects for their great work:
- Polyfill for simplifying .NET Standard 2.0 & 2.1 support
- Microsoft's System.ComponentModel.Annotations package for .NET Standard - This is used to enable .NET Standard 2.0 and 2.1 support on AlastairLundy.DotPrimitives's attributes.
- Microsoft's Microsoft.Bcl.HashCode for providing a backport of the HashCode class and static methods to .NET Standard 2.0
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.7)
-
.NETStandard 2.1
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on AlastairLundy.DotPrimitives.Collections:
Package | Downloads |
---|---|
AlastairLundy.EnhancedLinq.MsExtensions
LINQ style Deferred and Immediate enumeration mode extension methods for StringSegments and potentially other Microsoft.Extension.* packages in the future . |
|
AlastairLundy.EnhancedLinq.Memory
LINQ style Immediate enumeration mode extension methods for Spans and Memory. |
|
AlastairLundy.EnhancedLinq
Additional LINQ style Deferred and Immediate enumeration mode extension methods for .NET . |
GitHub repositories
This package is not used by any popular GitHub repositories.
## Changes
## 🚀 Features
- Add ``GroupCollection\<TKey, TElement>`` type which is an ``IGrouping\<TKey, TElement>`` implementation that also implements ``ICollection<TElement>`` @alastairlundy (#22)