目前我正在一個項目中,我需要排序總共6個數組。排序多個數組c#
我已經成功地單獨使用快速排序的數組進行排序,然而,我只是想知道,如果有一種方法排序1個陣列,反映了在其他數組中元素的順序。例如,如果我按升序排列我的日期數組,我希望其他數組仍然與新訂單的日期相匹配。
如果可能的話,可這仍然可以通過快速排序呢?
目前我正在一個項目中,我需要排序總共6個數組。排序多個數組c#
我已經成功地單獨使用快速排序的數組進行排序,然而,我只是想知道,如果有一種方法排序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;
您鍵入這麼快 –
@HaseebAsif年節目將導致= P –
抱歉這麼晚纔回復,我一直很忙>。<確定這看起來很有希望,但如果將我申請這一個自定義的快速排序,這仍然工作方法而不是內置的.Sort?對於這個項目,我不允許使用內置的排序機制,因爲我需要計算我的程序的效率...... that and regulations>。> – PTR01
我覺得更合適的選擇將是創建一個與所有不同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。
這種方法讓你的代碼乾淨,易於管理爲好。
它看起來像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();
有可能是一種方式,但它似乎你的問題的一個更好的方法是有對象的單個陣列,和排序1個陣列由他們的日期 –
有'Array.Sort',它可以讓你通過一個keys數組對數組進行排序。 – SimpleVar
這是更容易,如果你包了6個陣列中的所有數據在一個單一的結構(它自己的類或數組),讓你的快速排序功能的拉姆達或'Func'進行排序做,那麼結果排序後分裂。 – Mephy