本文的重點主要是解決:list物件集合的排序功能。
一、list.sort 方法 ()
msdn對這個無參sort()方法的介紹:使用預設比較器對整個list中的元素進行排序。
1.1.對於數字型別的呼叫
呼叫結果:為公升序,無法滿足降序。
示例:
1.2.對於字串型別的呼叫
呼叫結果:把值解析成拼音字母,按照首個英文本母順序公升序排列,如果首字母相同,比較第二個的首字母。
示例:
1.3.對於自定義物件的呼叫
呼叫結果:無法完成方法的執行,執行報錯。
示例:
總結:很顯然這個無參的sort()方法很難滿足我們實際開發中需求,對於物件導向程式設計我們,常常就是對集合中的物件進行排序。
二、自定義物件型別預設排序
物件本身不是乙個具體的值,在排序邏輯上顯然要選擇物件的乙個屬性進行排序。
1.1手動設定無參sotr()方法的預設排序邏輯
將list的指定型別的類實現icomparable泛型介面,示例:
1排序邏輯:this在前面就意味著指定按照這個屬性公升序,如果寫在後面就是降序。呼叫:class student:icomparable2
5public
string name
6public
int age 78
public
intcompareto(student other)
913 }
listlist_obj = new list,在呼叫sort()方法的時候,就自動呼叫了我們實現介面的compareto方法的邏輯**。new student ,
new student ,
};list_obj.sort();
for (int i = 0; i < list_obj.count; i++)
,年齡:
",list_obj[i].name,list_obj[i].age);
console.writeline(output_result);
}
結果如圖:
總結:此方法的實現,雖然解決了可以按照物件屬性進行公升序和降序,但是在實現compareto的方法裡,指定的屬性是固定的。這樣的話顯然
不靈活,那麼下面就介紹另一種方法,解決該問題。
二、自定義物件型別動態排序
預設排序,通過實現icomparable泛型介面來完成。並且在實現comparato介面裡指定排序的屬性是固定的,寫死的。如果功能上有多條件排序(按照年齡、學號等等),預設排序就無法滿足。
1.1為每乙個要排序的屬性寫乙個對應的排序類,乙個排序邏輯對應乙個排序類,示例:
//1.2.呼叫按照id公升序
class studentorderby_id_asc:icomparer
}//按照年齡降序
class studentorderby_age_desc:icomparer
}
listlist_obj = new list,1.3.輸出結果:new student ,
new student ,
new student ,
};//---按照id公升序----
list_obj.sort(new
studentorderby_id_asc());
console.writeline(
"---按照id公升序----");
for (int i = 0; i < list_obj.count; i++)
,學號:
",list_obj[i].name,list_obj[i].id);
console.writeline(output_result);
}//---end按照id公升序----
//---按照年齡降序----
list_obj.sort(new
studentorderby_age_desc());
console.writeline(
"---按照年齡降序----");
for (int i = 0; i < list_obj.count; i++)
,年齡:
", list_obj[i].name, list_obj[i].age);
console.writeline(output_result);
}//---end按照年齡降序----
1.4編寫邏輯:
確定好要排序的屬性和排序規則,為此寫乙個排序類。
編寫compare方法的排序邏輯(指定排序屬性,排序邏輯)。
建立排序類的物件,作為引數參入,呼叫sort()方法。
在具備知識點的前提結合msdn文件可以嘗試透析原理。
泛型集合List
泛型集合list泛型最重要的應用就是集合操作,使用泛型集合可以提高 重用性,型別安全和更佳的效能。list的用法和arraylist相似,list有更好的型別安全性,無須拆,裝箱。定義乙個list泛型集合的語法如下 list集合名 new list 在泛型定義中,泛型型別引數 是必須指定的,其中t是...
List泛型集合
陣列 定義後長度固定的。泛型集合可以改變。list字串集合,集合中多個字串。與陣列一樣,索引從0開始,對應每乙個字串。方法有。list.add 增加,list.removeat 根據索引刪除。list.insert 0,插入。list.addrange 陣列 list.sort 公升序,list.r...
泛型集合List
泛型是具有佔位符 型別引數 的類 結構 介面和方法,這些佔位符是類 結構 介面和方法所儲存或使用的乙個或多個型別的佔位符。泛型集合類可以將型別引數用作它所儲存的物件的型別的佔位符 型別引數作為其字段的型別和其方法的引數型別出現。泛型方法可以將其型別引數用作其返回值的型別或者其形參的 型別之一。lis...