2011-11-17 17 views
7

2D pürüzlü dizim var. Ve onu herhangi bir sıraya göre sıralamak istiyorum.Jagged dizisini C# satırında sırayla nasıl sıralarım?

Ben aramalara ve

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])); 
} 

herhangi satırlara göre sıralama için adapte edebilir sütunlarla sıralama kodunu bulundu?

Herhangi bir yardım için teşekkür ederiz. Benim pürüzlü dizinin

Örnek (Eklenen)

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(); 
      } 
     } 

    } 

benim pürüzlü dizi CAPM'in ile sıralamak istediğiniz @Martin @Dani & [2] []. Bunu yaparken düşünebilirsiniz

+0

+1 oluşturulur. Basit bir cevap için –

cevap

4

tek yolu endeksleri bir dizi göre sıralama edilir:

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

Dizinin tamamını yalnızca seçilen bir sıraya göre sıralamak istiyorum. Her sırayı sıralamak istemiyorum. – stereo

+0

@stereo: Bir tablonun sütunlarını sıralı olarak sıralamak gibi mi? – Dani

1

bu .. 3 öğe tarafından sıralanır ama bir 2D dizidir pürüzlü dizi kullanıyorsunuz Verilen Her satırın aynı sayıda sütun içerdiğini garanti etmek istiyorsanız muhtemelen daha iyi ... Eğer dizinin içinde 3. sütun bulunmayan bir diziniz varsa, bu başarısız olur!

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

Düzenleme:

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

dizinin kendisi sıralanmamıştır: yeni verilerle bir şey yapmak için

ya iade veya referans ile parametre geçmesi gerekiyor başvuru , yeni bir sıralanmış dizi, yararlı bir soru için

+0

Çalışmıyor ..... – stereo

+0

Bana yardımcı olmak için bana daha fazla ayrıntı vermeniz gerekecek .. Bunu test ettim ve iyi sonuç vermedikçe sonuç çıkmadığı sürece gayet iyi çalışıyor .. –

+0

Size bir örnek vermem açık değil. Lütfen tekrar soruya bakın. Zaten pürüzlü dizimin bir örneğini ekledim. – stereo