2011-11-17 75 views
7

我有2D鋸齒陣列。我想按任何行排序。如何在C#中按行排序鋸齒狀數組?

我搜查,發現代碼被列

private static void Sort<T>(T[][] data, int col) 
{ 
    Comparer<T> comparer = Comparer<T>.Default; 
    Array.Sort<T[]>(data, (x,y) => comparer.Compare(x[col],y[col])); 
} 

我可以用任何行適應它排序?

任何幫助表示讚賞。

我鋸齒狀陣列的樣品(新增)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int n = 10; 
      int[][] capm = new int[3][]; 
      for (int i = 0; i <= 2; i++) 
      { 
       capm[i] = new int[n + 1]; 
      } 
      Random rand = new Random();    
      for (int i = 1; i <= n; i++) 
      { 
       capm[1][i] = i; 
      } 

      for (int i = 1; i <= n; i++) 
      { 
       capm[2][i] = rand.Next(1, 6); 
      } 

      Sort(capm, 2); 

      Console.ReadLine(); 
     } 
      private static void Sort<T>(T[][] data, int col)  
      { 
       data = data.OrderBy(i => i[col]).ToArray(); 
      } 
     } 

    } 

@Dani & @馬丁我希望我的鋸齒形陣列由CAPM排序[2] []。

+0

+1,獲得有用的問題。 –

回答

4

我能想到這樣做的唯一途徑是通過指數的數組排序:

private static void Sort<T>(T[][] data, int row) 
{ 
    int[] Indices = new int[data[0].Length]; 
    for(int i = 0; i < Indices.Length; i++) 
     Indices[i] = i; 

    Comparer<T> comparer = Comparer<T>.Default; 
    Array.Sort(Indices, (x, y) => comparer.Compare(data[row][x], data[row][y]); 

    for(int i = 0; i < data.Length; i++) 
    { 
     T[] OldRow = (T[])data[i].Clone(); 
     for(int j = 0; j < OldRow.Length; j++) 
      data[i][j] = OldRow[i][Indices[j]]; 
    } 
} 
+0

+ 1,簡單回答。 –

+0

我想通過一個只選擇的行對整個數組進行排序。不想分類每一行。 – stereo

+0

@stereo:你的意思是基於行排序表的列? – Dani

1

由於您使用的是交錯數組,這將通過3項..排序,但二維數組如果你想保證每一行的列數相同,那麼可能會更好......如果你的數組中有一個沒有第三列的數組,那麼這將失敗!

private static void Sort<T>(T[][] data, int col)  
{ 
    data = data.OrderBy(i => i[col]).ToArray(); 
} 

編輯:

爲了做任何新的數據引用您可能需要返回,或按引用傳遞參數:

private static void Sort<T>(ref T[][] data, int col)  
{ 
    data = data.OrderBy(i => i[col]).ToArray(); 
} 

數組本身是沒有排序,創建一個新的排序陣列

+0

沒有工作..... – stereo

+0

你需要給我比我更多的細節來幫助..我測試了它,它工作正常,除非我誤解了你期望的結果是什麼.. –

+0

可能是我不清楚給你一個例子。請再看問題。我已經添加了一個鋸齒狀數組的樣本。 – stereo