I’m currently experimenting a bit with LINQ. Let’s say I have two collections of identical length:
var first = new string[] { "1", "2", "3" };
var second = new string[] { "a", "b", "c" };
I would like to merge those two collections into one, but in an interleaved fashion. The resulting sequence should thus be:
"1", "a", "2", "b", "3", "c"
What I’ve come up with so far is a combination of Zip, an anonymous type and SelectMany:
var result = first.Zip( second, ( f, s ) => new { F = f, S = s } )
.SelectMany( fs => new string[] { fs.F, fs.S } );
Does anybody know of an alternate/simpler way to achieve such an interleaved merge with LINQ?
Warning: this will skip trailing elements if the enumerations have different lengths. If you’d rather substitute in nulls to pad out the shorter collection, use Andrew Shepherd’s answer below.
You could write your own
Interleaveextension method, like in this example.