MoreLINQ

De Banane Atomic
Aller à la navigationAller à la recherche

Links

Add the package to a project

Bash.svg
dotnet add package MoreLINQ

Operators

Aggregate

Batch

Batches the source sequence into sized buckets.

Csharp.svg
Enumerable
    .Range(1, 10)
    .Batch(3);  // split the sequence into sequences of max length 3
// [1, 2, 3]
// [4, 5, 6]
// [7, 8, 9]
// [10]

Cartesian

Returns the Cartesian product of two or more sequences by combining each element from the sequences and applying a user-defined projection to the set.

Csharp.svg
new[] { "A", "B" }
    .Cartesian(
        new[] { 1, 2 },
        (x, y) => $"{x}{y}");
// A1
// A2
// B1
// B2

DistinctBy

Returns all distinct elements of the given source, where "distinctness" is determined via a projection and the default equality comparer for the projected type.

Csharp.svg
var items = new[]
{
    new { Id = 1, Name = "One" },
    new { Id = 2, Name = "Two" },
    new { Id = 3, Name = "One" },
    new { Id = 2, Name = "Two again" }
};

items.DistinctBy(x => x.Id);   // 1 2 3
items.DistinctBy(x => x.Name); // 1 2 2

ExceptBy

Returns the set of elements in the first sequence which aren't in the second sequence, according to a given key selector.

Csharp.svg
var items2 = new[]
{
    new { Id = 2, Name = "One" }
};

items.ExceptBy(items2, x => x.Id);   // 1 3
items.ExceptBy(items2, x => x.Name); // 2 2

FallbackIfEmpty

Returns the elements of a sequence and falls back to another if the original sequence is empty.

Csharp.svg
var integers = Array.Empty<int>();

integers.FallbackIfEmpty(new[] { 1, 2 });
integers.FallbackIfEmpty(1);    // int[] { 1 }
integers.FallbackIfEmpty(1, 2); // int[] { 1, 2 }