IList<A_Desc,A_premium,B_Desc,B_Premium>
我可以根據A_Desc對兩列A_Desc,A_premium ...進行排序嗎?我們可以對IList進行部分分類嗎?
而讓B_Desc,B_Premium排序
IList<A_Desc,A_premium,B_Desc,B_Premium>
我可以根據A_Desc對兩列A_Desc,A_premium ...進行排序嗎?我們可以對IList進行部分分類嗎?
而讓B_Desc,B_Premium排序
第一關前保持相同的順序,名單隻能是一種類型的,並且只有一個數據的「列」,讓你真正想要兩個列表和數據類型爲「desc」和「premium」。 「desc」聽起來像是一條弦;我不知道保費是什麼,但我會假裝它是double
缺乏更好的想法。我不知道這些數據應該代表什麼,所以對我來說,這只是一些事情。
public class Thingie{
public String desc;
public double premium;
}
那是當然的,一個可怕的方式來定義類 - 我應該改爲有遞減和溢價是私有的,並說明和Premium與get和set方法公共屬性。但這對我來說是最快捷的方式。
使Thingie實現IComparable更具規範性,並與其他Thingie對象進行比較。但是,我編輯了一個答案,在我知道您需要編寫自定義類型之前編寫了一個答案,並且可以自由地實現IComparable。所以這裏是IComparer的方法,它可以讓你通過告訴C#如何對它們進行排序來排序自己的對象。
實現對您的自定義類型進行操作的IComparer。
public class ThingieSorter: IComparer<Thingie>{
public int Compare(Thingie t1, Thingie t2){
int r = t1.desc.CompareTo(t2);
if(r != 0){return r;}
return t1.premium.CompareTo(t2);
}
}
C#不需要的IList實現排序 - 如果它是一個LinkedList它可能是低效的。因此,讓一個新的列表,基於陣列,其排序有效地做,並對其進行排序:
public List<Thingie> sortedOf(IList<Thingie> list){
List<Thingie> ret = new List<Thingie>(list);
ret.sort(new ThingieSorter());
return ret;
}
List<Thingie>
實現接口IList<Thingie>
,所以這個應該不是破壞任何東西取代原有的列表中,只要你沒有任何東西保持原來的名單,神奇地期待它被排序。如果發生這種情況,請重構代碼,以便在列表排序後才能獲取引用,因爲它無法排序。
請改寫您的文章,縮進代碼樣本四個字符。 IList的完整聲明已被吞噬,因爲它看起來像無效的HTML。 – 2010-12-03 18:39:10