Click here to Skip to main content
15,887,880 members
Articles / General Programming / Sorting
Tip/Trick

Sorting a two-dimensional array in C#

Rate me:
Please Sign up or sign in to vote.
4.90/5 (9 votes)
7 Mar 2011CPOL 46.7K   6   7
A generic routine to sort a two-dimensional array in C# on any column in either order
C#
/// <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();
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Takamomto, LLC
United States United States
I have been doing database related programming in the financial services industry for over 20 years on various platforms. I used to be a UNIX Sybase DBA but now prefer programming in the .NET environment using C# and SQL Server.

Comments and Discussions

 
QuestionExcellent! Pin
Member 897295-Jun-12 0:22
Member 897295-Jun-12 0:22 
GeneralReason for my vote of 5 Perfetto! Very practical, production... Pin
DrABELL9-Apr-11 12:48
DrABELL9-Apr-11 12:48 
GeneralReason for my vote of 4 Good one... Pin
Pravin Patil, Mumbai7-Mar-11 19:49
Pravin Patil, Mumbai7-Mar-11 19:49 
GeneralGood work Tony.... Pin
Pravin Patil, Mumbai7-Mar-11 19:49
Pravin Patil, Mumbai7-Mar-11 19:49 
GeneralCopy cat? Yes, of course. Did you not see the reference in ... Pin
Tony Zackin4-Mar-11 5:42
Tony Zackin4-Mar-11 5:42 
GeneralRe: Sorry. I didn't noticed the reference. 5! it. Pin
Venkatesh Mookkan18-Mar-11 1:46
Venkatesh Mookkan18-Mar-11 1:46 
GeneralReason for my vote of 1 Copy cat. http://stackoverflow.com/... Pin
Venkatesh Mookkan3-Mar-11 19:35
Venkatesh Mookkan3-Mar-11 19:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.