Releases: viceroypenguin/SuperLinq
v4.8.0
What's Changed
- Add Source Generated code to git by @viceroypenguin in #177
- Bump MinVer from 4.2.0 to 4.3.0 by @dependabot in #179
- Bump ThisAssembly.Resources from 1.2.0-rc to 1.2.1 by @dependabot in #178
- Update
CopyTo
Return Value by @viceroypenguin in #180 - Address MinVer 4.3.0 changes by @viceroypenguin in #181
- Update Tests to use
TestingSequence
properly by @viceroypenguin in #120 - Improve
ToArrayByIndex
Operator by @viceroypenguin in #186 - Add
int
form ofReplace
operator by @viceroypenguin in #187 - Obsolete
Trace
by @viceroypenguin in #188 - Bump ThisAssembly.Resources from 1.2.1 to 1.2.4 by @dependabot in #189
- Bump Scriban from 5.5.2 to 5.6.0 by @dependabot in #190
- Restore
AssertCount
operator by @viceroypenguin in #191 - Update
Fold
to useAssertCount
by @viceroypenguin in #192 - Update Local Function Name by @viceroypenguin in #193
- Add buffered overloads of
Batch
by @viceroypenguin in #197 Batch
performance optimization by @viceroypenguin in #198- Bump ThisAssembly.Resources from 1.2.4 to 1.2.6 by @dependabot in #201
- Enforce and address code style issues by @viceroypenguin in #202
- Improve test visibility for various collection types by @viceroypenguin in #203
- Address build warnings by @viceroypenguin in #204
- Remove
BreakingList
as unnecessary by @viceroypenguin in #205 - Consolidate
TryGetCollectionCount
usage by @viceroypenguin in #210 - Add Documentation via GH Pages by @viceroypenguin in #215
- Automate GH Release by @viceroypenguin in #225
- Separate
Window
implementations by @viceroypenguin in #226 - Bump ThisAssembly.Resources from 1.2.6 to 1.2.9 by @dependabot in #227
Full Changelog: v4.7.0...v4.8.0
v4.7.0
What's Changed
- Improve code in
Return
operator by @viceroypenguin in #131 - Remove
ReadOnlyCollection
/ReadOnlyList
support to match corelib behavior by @viceroypenguin in #132 - Update
TryGetCollectionCount
to useTryGetNonEnumeratedCount
from .net6.0+ corelib by @viceroypenguin in #117 CountDown
should throw on negativecount
by @viceroypenguin in #133- Add Buffered overloads of
Window
by @viceroypenguin in #134 - Add Buffered overloads of
WindowRight
by @viceroypenguin in #135 - Add Buffered overloads of
WindowLeft
by @viceroypenguin in #136 - Bump Microsoft.NET.Test.Sdk from 17.4.0 to 17.4.1 by @dependabot in #127
- Improve test logging by @viceroypenguin in #138
- Bump PolySharp from 1.8.1 to 1.10.0 by @dependabot in #139
- Improve Testing Behavior by @viceroypenguin in #141
- Fix Typos by @viceroypenguin in #142
- Add support for using
TestingSequence
more than once by @viceroypenguin in #143 - Improve performance of
ScanRight
by @viceroypenguin in #144 - Fix
Exclude
to not callMoveNext
past end of sequence by @viceroypenguin in #145 - Bump PolySharp from 1.10.0 to 1.12.1 by @dependabot in #147
- Bump CommunityToolkit.Diagnostics from 8.0.0 to 8.1.0 by @dependabot in #148
- Bump Microsoft.CodeAnalysis.Analyzers from 3.3.3 to 3.3.4 by @dependabot in #146
- Improve
AggregateRight
performance by @viceroypenguin in #149 - Migrate Source Generators to Scriban by @viceroypenguin in #154
- Restore
EquiZip
operator by @viceroypenguin in #155 - Migrate
ZipLongest
to Source Generator by @viceroypenguin in #162 - Switch to new
nullable
check system by @viceroypenguin in #163 TestingSequence
improvements by @viceroypenguin in #156- Migrate
ZipShortest
to Source Generator by @viceroypenguin in #164 - Address
Window
Issues by @viceroypenguin in #167 - Copy
TestingSequence
improvements to Tests.Async by @viceroypenguin in #170 - Fix
PadStart
Bug withICollection<>
by @viceroypenguin in #175
Full Changelog: v4.6.0...v4.7.0
v4.6.0
What's Changed
- Add
IndexOf
operator by @viceroypenguin in #111 - Add missing
IndexOf
operator by @viceroypenguin in #113 - Add
LastIndexOf
operator by @viceroypenguin in #114 - Add
FindIndex
operator by @viceroypenguin in #115 - Add
FindLastIndex
operator by @viceroypenguin in #118 - Update
(Last)IndexOf
operators to proxy toFind(Last)Index
by @viceroypenguin in #119 - Improve
Permutations
operator by @viceroypenguin in #121 - Address New CA1852 Warning by @viceroypenguin in #122
- Code Analysis Improvements by @viceroypenguin in #123
- Remove net5.0 TargetFramework by @viceroypenguin in #124
- Add
GetShortestPath
overload by @viceroypenguin in #128 - Add ValueTuple version of
Cartesian
by @viceroypenguin in #129
Full Changelog: v4.5.0...v4.6.0
v4.5.0
What's Changed
- Throw Exception when unable to find 'end' by @viceroypenguin in #75
- Add .CopyTo() operator by @viceroypenguin in #76
- Reduce level of Indirection for Identity by @viceroypenguin in #82
- Address PR (#76) comments by @viceroypenguin in #81
- Update dependencies by @viceroypenguin in #88
- Simplify the NullKeyDictionary by @viceroypenguin in #89
- Add additional assertions in TestingSequence by @viceroypenguin in #90
- Add Debug.AssertNotNull() by @viceroypenguin in #91
- Improve
Partition
nullability by @viceroypenguin in #92 - Update
Lookup
code by @viceroypenguin in #93 - Correct nullability types in
GetShortestPath
by @viceroypenguin in #94 - Remove dead code by @viceroypenguin in #96
Split
: Remove impossible code by @viceroypenguin in #99- Address incorrect
AssertNotNull
calls by @viceroypenguin in #98 - Update
Split
parameters by @viceroypenguin in #100 - Add missing
Interleave
unit test by @viceroypenguin in #97 ReverseComparer
: Remove dead code by @viceroypenguin in #102- Remove slow-performing analyzer by @viceroypenguin in #103
ZipShortest
: Improve CI coverage by @viceroypenguin in #105- Add
ValueTuple
version ofTagFirstLast
by @viceroypenguin in #106 - Finish addressing issues with
AssertNotNull
by @viceroypenguin in #108 CopyTo
: Improve unit test coverage by @viceroypenguin in #104
Full Changelog: v4.4.0...v4.5.0
v4.4.0
What's Changed
- Improve PartialSort performance by @viceroypenguin in #67
Full Changelog: v4.3.0...v4.4.0
v4.3.0
What's Changed
- Implement DensePartialSort by @viceroypenguin in #62
- Add Min/MaxItems by @viceroypenguin in #63
Full Changelog: v4.2.0...v4.3.0
v4.2.0
What's Changed
- Add .Replace() by @viceroypenguin in #51
- Add new Join methods by @viceroypenguin in #53
Full Changelog: v4.1.0...v4.2.0
v4.1.0
What's Changed
- Add .Where(IEnumerable) by @viceroypenguin in #34
- Add .ConcurrentMerge() operator by @viceroypenguin in #35
- Add Path-Finding algorithms by @viceroypenguin in #36
- Add async Graph Traversal functions by @viceroypenguin in #37
- Restore .Scan() as .ScanEx() by @viceroypenguin in #41
- Add .CollectionEqual() operator by @viceroypenguin in #42
- Migrate Exception code to CommunityToolkit.Diagnostics by @viceroypenguin in #45
- Add .SortedMergeBy() by @viceroypenguin in #44
- Add .BindByIndex() by @viceroypenguin in #43
Full Changelog: v4.0.0...v4.1.0
Release 4.0.0
Initial Release of SuperLinq and SuperLinq.Async
SuperLinq is a fork of MoreLINQ. This fork has been created to address incompatibilities between MoreLINQ and the most recent versions of .NET.
What's changed?
- SuperLinq is completely compatible with .net core 3.1, .net 5, and .net 6.
- SuperLinq.Async has been created to mirror the operators provided by SuperLinq for
IAsyncEnumerable<>
. - Dependency on System.Interactive has been added, to reduce duplication of effort when operators are implemented by System.Interactive.
- Methods duplicating implementations in .net or System.Interactive have been removed.
- Additional overloads have been added using
ValueTuple<>
when appropriate for convenience.
Migration from MoreLINQ
In most case, migration should be easy:
- Remove the nuget reference to MoreLINQ and add a reference to SuperLinq.
- Replace any
using MoreLinq;
withusing SuperLinq;
- Remove any
using MoreLinq.Extensions.*
This is because SuperLinq has been updated to be side-by-side compatible
with .NET Core 3.1 and .NET 5.0/6.0.
Breaking Changes
Framework Support
Support for earlier frameworks has been dropped. The earliest version supported
by SuperLinq is .NET Core 3.1.
System.Interactive
SuperLinq now holds a dependency on System.Interactive. This is because some
methods from SuperLinq overlap functions with the same and occasionally the same
name. To reduce conflicts, SuperLinq will defer to System.Interactive for
these methods when possible. Methods removed include: .Repeat()
, .Scan()
, .ForEach()
,
.Memoize()
.
Acquire
Acquire has been removed. It was used internally to support other operators, but
improved data structures have been introduced to better support them.
AwaitQuery/Observable/Experimental Operators
These operators have been removed, as they do not fit the model of the other
SuperLinq operators.
Backsert
This method has been obsoleted in favor of a new overload for .Insert()
that
receives an Index
parameter, which covers the same behavior.
Batch
The .Batch()
method has been obsoleted in favor of the .NET method .Chunk()
or the System.Interactive method .Buffer()
.
CountDown
An additional overload has been added that returns a stream of (TSource item, int? count)
.
Lag/Lead
Additional overloads have been added for Lag/Lead that return streams of
(TSource cur, TSource lag/lead)
.
MaxBy/MinBy
MaxBy and MinBy have been removed. These methods are superceded by PartialSort,
and conflict with new .NET 6.0 MaxBy/MinBy methods that operate slightly differently.
Pairwise
Pairwise has been removed as it overlaps behavior with both .Lag()
and .Window()
PartialSort
The sorting behavior of .PartialSort()
has been changed slightly, as it now uses
a stable sorting algorithm. This means that items that have the same value (or key)
will return in the same order that they were originally encountered in the stream.
This is a minor change from old sorting behavior.
Rank
The behavior and return type of Rank has been updated:
- Previously, Rank would rank according the highest value by default, opposite to the sorting.
- Now, Rank ranks according to the lowest value, matching the sorting
- Previously, Rank would return a simple list of integers matching the original items
- Now, Rank returns a sorted list of items with their rank
- Previously, Rank would rank each group with a sequential rank value
- Now, Rank ranks each group according to how many total items have been encountered
in the stream thus far. - DenseRank will rank each group with a seqential value.
- Now, Rank ranks each group according to how many total items have been encountered
All of these changes are made to bring Rank/DenseRank with the
behavior expressed for Rank/DenseRank in SQL systems (Sql Server, PostgreSQL, etc.)
RunLengthEncode
The return type has been changed from a stream of KeyValuePair<T, int>
to a stream of (T value, int count)
Scan
The .Scan()
method has been removed in favor of the System.Interactive version
of the method. However, the behavior of the System.Interactive version differs
slightly in that it does not return the seed/first element. If the existing behavior
is desired, a new version of .Scan()
may be introduced with a different name
and the old behavior.