AlastairLundy.DotPrimitives.Collections
3.2.0
Prefix Reserved
dotnet add package AlastairLundy.DotPrimitives.Collections --version 3.2.0
NuGet\Install-Package AlastairLundy.DotPrimitives.Collections -Version 3.2.0
<PackageReference Include="AlastairLundy.DotPrimitives.Collections" Version="3.2.0" />
<PackageVersion Include="AlastairLundy.DotPrimitives.Collections" Version="3.2.0" />
<PackageReference Include="AlastairLundy.DotPrimitives.Collections" />
paket add AlastairLundy.DotPrimitives.Collections --version 3.2.0
#r "nuget: AlastairLundy.DotPrimitives.Collections, 3.2.0"
#:package AlastairLundy.DotPrimitives.Collections@3.2.0
#addin nuget:?package=AlastairLundy.DotPrimitives.Collections&version=3.2.0
#tool nuget:?package=AlastairLundy.DotPrimitives.Collections&version=3.2.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.GroupEnumerable<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);
// GroupByEnumerable
var items = new[] { ("a", 1), ("b", 2), ("a", 3) };
var groups = new GroupEnumerable<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 support
- 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 was computed. |
.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.Hashcode (>= 6.0.0)
-
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 ``ConcurrentGroupingCollection\<TKey, TElement>`` @alastairlundy (#31)