2013年8月24日 星期六

C# List 自訂排序

C# 在 List 裡面放物件,
若要依照放在裡面物件的某一屬性來排序,
可實做 IComparer 來實現。

以下範例,是2層的 List (List裡面存放List),用放在內層 List 的第2元素來排序
class Program
{
    static void Main(string[] args)
    {
        List<string> list1d;
        List<List<string>> list2d = new List<List<string>>();

        list1d = new List<string>();
        list1d.Add("t1");
        list1d.Add("bb");
        list2d.Add(list1d);

        list1d = new List<string>();
        list1d.Add("t2");
        list1d.Add("aa");
        list2d.Add(list1d);

        list1d = new List<string>();
        list1d.Add("t3");
        list1d.Add("b1");
        list2d.Add(list1d);
        /* 排序前
        t1, bb
        t2, aa
        t3, b1
        */

        list2d.Sort(new MyList2dComparer());
        /* 排序後 (依據aa、b1、bb排序)
        t2, aa
        t3, b1
        t1, bb
        */
    }
}

// 自訂排序
private class MyList2dComparer : IComparer<List<string>>
{
    // 遞增排序
    public int Compare(List<string> x, List<string> y)
    {
        return (x[1].CompareTo(y[1]));
    }
}

參考
http://bbs.csdn.net/topics/230075175#post-220659128
http://msdn.microsoft.com/zh-tw/library/234b841s.aspx

沒有留言:

張貼留言