2013-03-28 84 views
0

時許,並且也有點憋屈問題,排序列表中項目的中間組成陣列

我需要梳理在C#中的列表 列表結構
public List < double[] > DataList = new List < double[] >();

現在

我想在列表進行排序雙數組的最後一個指數的基礎這份名單

2|3|5|6|8

2|3|5|6|9

2|3|5|6|5

2|3|5|6|12

輸出應該是這樣的

2|3|5|6|12

2|3|5|6|9

一些事情

2|3|5|6|5

回答

3

使用LINQ:

// reproduce data 
List<double[]> DataList = new List<double[]>(); 
DataList.Add(new double[] { 2, 3, 5, 6, 8 }); 
DataList.Add(new double[] { 2, 3, 5, 6, 9 }); 
DataList.Add(new double[] { 2, 3, 5, 6, 5 }); 
DataList.Add(new double[] { 2, 3, 5, 6, 12 }); 

var ordered = DataList.OrderByDescending(l => l.Last()); 

l將對應於每個元素DataList。用l.Last()您使用最後一個元素作爲排序標準。

0

而且使用LINQ:

var tList = new List<double[]>(); 
tList.Add(new double[] {2,3,4,5,8}); 
tList.Add(new double[] {2,3,4,5,9}); 
tList.Add(new double[] {2,3,4,5,5}); 
tList.Add(new double[] {2,3,4,5,12}); 

var t = from element in tList 
     orderby element.Last() descending 
     select element; 
var tResults = t.ToList(); 
-1

這是一些老同學,而無需使用LINQ排序。

 List<double[]> DataList = new List<double[]>(); 
     private void button1_Click(object sender, EventArgs e) 
     { 
      DataList.Add(new double[] { 2, 3, 5, 6, 8 }); 
      DataList.Add(new double[] { 2, 3, 5, 6, 9 }); 
      DataList.Add(new double[] { 2, 3, 5, 6, 5 }); 
      DataList.Add(new double[] { 2, 3, 5, 6, 12 }); 
      DataList.Sort(new DoubleArrayComparer()); 
      DataList.Reverse(); 
     } 
     class DoubleArrayComparer : IComparer<double[]> 
     { 
      public int Compare(double[] x, double[] y) 
      { 
       if(x.Length>0 && y.Length>0) 
       { 
        if(x[x.Length-1] > y[y.Length-1]) 
         return 1; 
        else if(x[x.Length-1] < y[y.Length-1]) 
         return -1; 
        else 
         return 0; 

       } 
       else if(x.Length == 0 && y.Length!=0) 
        return -1; 
       else if(y.Length == 0 && x.Length!=0) 
        return 1; 
       else 
        return 0; 
      } 
     } 
+0

難道你不能只交換-1和+ 1來避免'Reverse'? –

+0

是的,在這種特殊情況下它會更合適,但通常我喜歡使排序順序升序,這對我來說很自然,因爲這是本機排序的工作方式。這是唯一的原因。 –