65.9K
CodeProject is changing. Read more.
Home

Sorting a two-dimensional array in C#

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (9 votes)

Mar 3, 2011

CPOL
viewsIcon

48009

A generic routine to sort a two-dimensional array in C# on any column in either order

/// <summary>
/// A generic routine to sort a two dimensional array of a specified type based on the specified column.
/// </summary>
/// <param name="array">The array to sort.</param>
/// <param name="sortCol">The index of the column to sort.</param>
/// <param name="order">Specify "DESC" or "DESCENDING" for a descending sort otherwise
/// leave blank or specify "ASC" or "ASCENDING".</param>
/// <remarks>The original array is sorted in place.</remarks>
/// <see cref="http://stackoverflow.com/questions/232395/how-do-i-sort-a-two-dimensional-array-in-c"/>
private static void Sort<T>(T[,] array, int sortCol, string order)
{
    int colCount = array.GetLength(1), rowCount = array.GetLength(0);
    if (sortCol >= colCount || sortCol < 0)
        throw new System.ArgumentOutOfRangeException("sortCol", "The column to sort on must be contained within the array bounds.");

    DataTable dt = new DataTable();
    // Name the columns with the second dimension index values, e.g., "0", "1", etc.
    for (int col = 0; col < colCount; col++)
    {
        DataColumn dc = new DataColumn(col.ToString(), typeof(T));
        dt.Columns.Add(dc);
    }
    // Load data into the data table:
    for (int rowindex = 0; rowindex < rowCount; rowindex++)
    {
        DataRow rowData = dt.NewRow();
        for (int col = 0; col < colCount; col++)
            rowData[col] = array[rowindex, col];
        dt.Rows.Add(rowData);
    }
    // Sort by using the column index = name + an optional order:
    DataRow[] rows = dt.Select("", sortCol.ToString() + " " + order);

    for (int row = 0; row <= rows.GetUpperBound(0); row++)
    {
        DataRow dr = rows[row];
        for (int col = 0; col < colCount; col++)
        {
            array[row, col] = (T)dr[col];
        }
    }

    dt.Dispose();
}
Sorting a two-dimensional array in C# - CodeProject