13,041,923 members (67,616 online)
Tip/Trick
alternative version

#### Stats

13.6K views
2 bookmarked
Posted 4 Dec 2011

# Translating a jagged array

, 13 Dec 2011
 Rate this:
Code to translate a jagged array.

The code below translates a jagged array. For a jagged array A, the result is a n*m jagged array, where the outer size is n=max(A[i].Length) and the inner size of each subarray is m=A.GetLength(0).

Remark: Holes after null or incomplete subarrays will be filled with default(T).

Usage:

```MyType[][] array = ...;
MyType[][] translated = array.Translate();```

For examle:

1. ```array = new int[5][] {
new int[]  { 5, 6, 7    },
new int [] { 1, 2, 3, 4 },
new int [] {            },
new int [] { 0, 1       },
null,
};
expected = new int[4][] {
new int[] { 5, 1, 0, 0, 0 },
new int[] { 6, 2, 0, 1, 0 },
new int[] { 7, 3, 0, 0, 0 },
new int[] { 0, 4, 0, 0, 0 },
};```

2. ```array = new int[2][] {
null,
null,
};
expected = new int[1][] {
new int[] { 0, 0 },
};```

For nullable types, there would be null instead of 0.

```public static class JaggedArrayExtensions
{
/// <summary>
/// Translates a given jagged array. Holes after null
/// or incomplete subarrays will be fileld with default(T).
/// </summary>
/// <typeparam name="T">Type of elements in the array</typeparam>
/// <param name="array">The array to translate</param>
/// <returns>A n*m jagged array, where the outer size is n=max(A[i].Length) and
/// the inner size of each subarray is m=A.GetLength(0).</returns>
public static T[][] Translate<t>(this T[][] array)
{
if (array == null)
throw new ArgumentNullException();
if (array.Length == 0)
return new T[0][];
int columnCount = array.Max(sub => sub == null ? 1 : sub.Length);
int rowCount = array.Length;
T[][] res = new T[columnCount][];
for (int i = 0; i < columnCount; i++)
{
res[i] = new T[rowCount];
for (int j = 0; j < rowCount; j++)
{
if (array[j] == null || i >= array[j].Length)
res[i][j] = default(T);
else
res[i][j] = array[j][i];
}
}
return res;
}
}```

## Share

 Software Developer (Junior) Poland
My name is Jacek Gajek. I have graduated in computer science with a master's degree from Polibuda in Wrocław. I like C# and Monthy Python's sense of humour.