Mux & Demux w / LINQ

I play using LINQ to Objects for multiplexing and demultiplexing, but it seems to me that this is a rather difficult problem.

See this demuxer signature:

public static IEnumerable<IEnumerable<TSource>> Demux<TSource>(this IEnumerable<TSource> source, int multiplexity)

At an abstract level, this is easy, but ideally I would like

  • remain lazy for the original thread
  • remain lazy for each multiplexed stream
  • do not repeat over the same elements

How do you do this?

I'm a little tired, so my concentration may not cope with me here ...

+3
source share
1 answer

, (0, 1, 2, 3) (0, 2) (1, 3) , . , . ...

:

// Ignoring disposing of iterators etc
var query = source.Demux(2);
var demuxIterator = query.GetEnumerator();
demuxIterator.MoveNext();
var first = demuxIterator.Current;
demuxIterator.MoveNext();
var second = demuxIterator.Current;
first.MoveNext();
Console.WriteLine(first.Current); // Prints 0
second.MoveNext();
Console.WriteLine(second.Current); // Prints 1

, :

// Ignoring disposing of iterators etc
var query = source.Demux(2);
var demuxIterator = query.GetEnumerator();
demuxIterator.MoveNext();
var first = demuxIterator.Current;
first.MoveNext();
Console.WriteLine(first.Current); // Prints 0
first.MoveNext();
Console.WriteLine(first.Current); // Prints 2

1, .

IList<T> IEnumerable<T>? "" LINQ , - .. .

, , GroupBy - , : GroupBy, .

+2

Source: https://habr.com/ru/post/1735719/


All Articles