2015-04-12 95 views
0

目前我正在一個項目中,我需要排序總共6個數組。排序多個數組c#

我已經成功地單獨使用快速排序的數組進行排序,然而,我只是想知道,如果有一種方法排序1個陣列,反映了在其他數組中元素的順序。例如,如果我按升序排列我的日期數組,我希望其他數組仍然與新訂單的日期相匹配。

如果可能的話,可這仍然可以通過快速排序呢?

+4

有可能是一種方式,但它似乎你的問題的一個更好的方法是有對象的單個陣列,和排序1個陣列由他們的日期 –

+0

有'Array.Sort',它可以讓你通過一個keys數組對數組進行排序。 – SimpleVar

+0

這是更容易,如果你包了6個陣列中的所有數據在一個單一的結構(它自己的類或數組),讓你的快速排序功能的拉姆達或'Func'進行排序做,那麼結果排序後分裂。 – Mephy

回答

1

可能是你有一個設置是這樣的:

DateTime [] dates; 
string [] names; 
int [] ids; 
//...etc 

考慮,而不是將數據壓縮成一個對象,然後有對象的單個陣列:

public class MyObject 
{ 
    DateTime date { get; set; } 
    string name { get; set; } 
    int id { get; set; } 
} 

現在,您將只有1個陣列:

MyObject [] objects; 

而且你可以通過它們的d吃:

objects.Sort((a, b) => a.date.CompareTo(b.date)); 

還要考慮使用列表而不是直線陣列,用例在C#中使用香草陣列非常小:

List<MyObject> objects; 
+0

您鍵入這麼快 –

+0

@HaseebAsif年節目將導致= P –

+0

抱歉這麼晚纔回復,我一直很忙>。<確定這看起來很有希望,但如果將我申請這一個自定義的快速排序,這仍然工作方法而不是內置的.Sort?對於這個項目,我不允許使用內置的排序機制,因爲我需要計算我的程序的效率...... that and regulations>。> – PTR01

1

我覺得更合適的選擇將是創建一個與所有不同6種屬性

public class myClass 
{ 
    public DateTime date{get;set;} 
    public string name{get;set;} 
    //.... 
} 

的新類然後創建該類的一個單個陣列/列表。現在

public List<myClass> arrData; 

您可以排序基於任何你想要的屬性進行陣列,它會保持這個順序按您的要求

arrData.OrderBy(x => x.name) 

您可以與您的任何myClass的財產取代x.name。

這種方法讓你的代碼乾淨,易於管理爲好。

1

它看起來像LINQ使用爲OrderBy方法快速排序算法(參見previous StackOverflow question)。
像這樣的東西應該照顧它給你:

DateTime[] datesOfBirth = new DateTime[] { new DateTime(1955, 10, 28), new DateTime(1955, 2, 24) }; 
String[] firstNames = new String[] { "William", "Steve" }; 
String[] lastNames = new String[] { "Gates", "Jobs" }; 

var people = 
    datesOfBirth 
    .Select((_, i) => new 
     { 
      DateOfBirth = datesOfBirth[i], 
      FirstName = firstNames[i], 
      LastName = lastNames[i] 
     }) 
    .OrderBy(x => x.DateOfBirth) 
    .ToArray();