Flattening a Jagged Array with LINQ

Today I had to flatten a jagged array.  In my case, it was a string[][] and I needed to make sure every single string contained in that jagged array was set to something (non-null and non-empty).  LINQ made the flattening very easy.  In fact, I ended up making a generic version that I could use to flatten any type of jagged array (assuming it's a T[][]):

private static IEnumerable<T> Flatten<T>(IEnumerable<T[]> data)
{
    return from r in data from c in r select c;
}

Then, checking to make sure the data was valid, was easy:

var flattened = Flatten(data);
bool isValid = !flattened.Any(s => String.IsNullOrEmpty(s));

You could even use method grouping and reduce the validation to:

bool isValid = !flattened.Any(String.IsNullOrEmpty);
Technorati Tags: ,,
Published Tuesday, March 09, 2010 9:01 PM by PSteele
Filed under: ,

Comments

# re: Flattening a Jagged Array with LINQ

Or you could just do:

var flattened = data.SelectMany(x => x);

Tuesday, March 09, 2010 10:07 PM by Ian Mercer

# re: Flattening a Jagged Array with LINQ

This is exactly what SelectMany does:

var flattened = data.SelectMany(s => s);

Wednesday, March 10, 2010 1:11 AM by Robert Jeppesen

# re: Flattening a Jagged Array with LINQ

Wednesday, March 10, 2010 4:04 AM by zproxy

# re: Flattening a Jagged Array with LINQ

Doh!  Yes, totally forgot about SelectMany.  Weird since I used it in one of my Project Euler solutions over a year ago (specifically to flatten a jagged array!).

weblogs.asp.net/.../project-eurler-12.aspx

Wednesday, March 10, 2010 7:19 AM by PSteele

# Markus Tamm &raquo; Blog Archive &raquo; Links 11.03.2010

Pingback from  Markus Tamm  &raquo; Blog Archive   &raquo; Links 11.03.2010

Thursday, March 11, 2010 3:59 AM by Markus Tamm » Blog Archive » Links 11.03.2010