8000 GitHub - RFPAlves/csharp-itertools: C# library based on Python 3 itertools
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

RFPAlves/csharp-itertools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSharp Itertools

downloads latest version build status test results

This library implements a number of iterator building blocks inspired by Python 3 itertools module. Each has been recast in a form suitable for C#.

Installation

You can either register Itertools class in DI (Dependency Injection)

services.AddItertools();

... or instantiate manually.

IItertools itertools = new Itertools();

Infinite iterators

Cycle:

using CSharpItertools;

var itertools = new Itertools();

foreach (char letter in itertools.Cycle("ABCD"))
    Console.WriteLine(letter);

Output:

A
B
C
D
A
B
... // repeats indefinitely

Iterators terminating on the shortest input sequence

Zip and ZipLongest:

Make an iterator that aggregates elements from each of the iterables.

using CSharpItertools;

var itertools = new Itertools();

var iterable1 = new[] { 1, 2, 3 };
var iterable2 = new[] { 'A', 'B', 'C', 'D' };

forech (var item in itertools.Zip(iterable1, iterable2))
    Console.WriteLine(item);
  
forech (var item in itertools.ZipLongest(iterable1, iterable2))
    Console.WriteLine(item);

Output Zip:

(1, A)
(2, B)
(3, C)

Output ZipLongest:

  • If the iterables are of uneven length, missing values are filled-in with null. Iteration continues until the longest iterable is exhausted.
(1, A)
(2, B)
(3, C)
(, D)

FilterFalse:

Make an iterator that filters elements from iterable returning only those for which the predicate is false.

using CSharpItertools;

var itertools = new Itertools();
var iterable = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

foreach (int i in itertools.FilterFalse(x => x % 2 > 0, iterable))
    Console.WriteLine(i);

Output:

2
4
6
8

ISlice

Make an iterator that returns selected elements from the iterable.

using CSharpItertools;

var itertools = new Itertools();
var iterable = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };

foreach (char l in itertools.ISlice(iterable, start: 3, stop: 6))
    Console.WriteLine(l);

Output:

D
E
F

Compress

Make an iterator that filters elements from data returning only those that have a corresponding element in selectors that evaluates to true.

using CSharpItertools;

var itertools = new Itertools();

var iterable = new[] { 'X', 'Y', 'Z', 'W' };
var selectors = new object[] { true, false, true, null };

foreach (char l in itertools.Compress(iterable, selectors))
    Console.WriteLine(l);

Output:

X
8829

Z

Combinatoric iterators

Product

Cartesian product of input iterables.

using CSharpItertools;

var itertools = new Itertools();

var iterable1 = new List<int> { 1, 2, 3 };
var iterable2 = new List<int> { 6, 7 };

foreach (var arr in itertools.Product(iterable1, iterable2))
    Console.WriteLine("[{0}, {1}]", arr[0], arr[1]); // Output 1
    
var iterable3 = new[] { 'X', 'Y', 'Z' };

foreach (var arr in itertools.Product(iterable3, repeat: 2))
    Console.WriteLine("[{0}, {1}]", arr[0], arr[1]); // Output 2

Output 1:

[1, 6]
[1, 7]
[2, 6]
[2, 7]
[3, 6]
[3, 7]

Output 2:

[X, X]
[X, Y]
[X, Z]
[Y, X]
[Y, Y]
[Y, Z]
[Z, X]
[Z, Y]
[Z, Z]

Permutations

Return successive r length permutations of elements in the iterable.

using CSharpItertools;

var itertools = new Itertools();
var iterable = "ABCD";

foreach (var arr in itertools.Permutations(iterable, 2))
    Console.WriteLine("[{0}, {1}]", arr[0], arr[1]);

Output:

[A, B]
[A, C]
[A, D]
[B, A]
[B, C]
[B, D]
[C, A]
[C, B]
[C, D]
[D, A]
[D, B]
[D, C]

Combinations

Return r length subsequences of elements from the input iterable.

using CSharpItertools;

var itertools = new Itertools();
var iterable = new object[] { 'A', 3, 9, 'Z' };

foreach (object[] arr in itertools.Combinations(iterable, 3))
    Console.WriteLine("[{0}, {1}, {2}]", arr[0], arr[1], arr[2]);

Output:

[A, 3, 9]
[A, 3, Z]
[A, 9, Z]
[3, 9, Z]

Releases

No releases published

Packages

No packages published

Languages

0