Skip to content

Releases: viceroypenguin/SuperLinq

v4.8.0

21 Feb 14:00
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.7.0...v4.8.0

v4.7.0

30 Jan 01:54
e1656ad
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.6.0...v4.7.0

v4.6.0

23 Jan 00:16
ace91c4
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.5.0...v4.6.0

v4.5.0

11 Dec 21:24
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.4.0...v4.5.0

v4.4.0

03 Oct 14:50
f52cca2
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.3.0...v4.4.0

v4.3.0

28 Sep 13:51
b8564b5
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.2.0...v4.3.0

v4.2.0

25 Aug 12:55
e3152f1
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.1.0...v4.2.0

v4.1.0

12 Aug 11:16
b942b7f
Compare
Choose a tag to compare

What's Changed

Full Changelog: v4.0.0...v4.1.0

Release 4.0.0

20 Jul 17:22
Compare
Choose a tag to compare

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:

  1. Remove the nuget reference to MoreLINQ and add a reference to SuperLinq.
  2. Replace any using MoreLinq; with using SuperLinq;
  3. 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.

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.