2010-12-03 120 views
0
IList<A_Desc,A_premium,B_Desc,B_Premium> 

我可以根據A_Desc對兩列A_Desc,A_premium ...進行排序嗎?我們可以對IList進行部分分類嗎?

而讓B_Desc,B_Premium排序

+0

請改寫您的文章,縮進代碼樣本四個字符。 IList的完整聲明已被吞噬,因爲它看起來像無效的HTML。 – 2010-12-03 18:39:10

回答

0

第一關前保持相同的順序,名單隻能是一種類型的,並且只有一個數據的「列」,讓你真正想要兩個列表和數據類型爲「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>,所以這個應該不是破壞任何東西取代原有的列表中,只要你沒有任何東西保持原來的名單,神奇地期待它被排序。如果發生這種情況,請重構代碼,以便在列表排序後才能獲取引用,因爲它無法排序。

相關問題