List泛型集合物件排序

2022-02-09 06:23:00 字數 2992 閱讀 3013

本文的重點主要是解決:list物件集合的排序功能。

一、list.sort 方法 ()

msdn對這個無參sort()方法的介紹:使用預設比較器對整個list中的元素進行排序。

1.1.對於數字型別的呼叫

呼叫結果:為公升序,無法滿足降序。

示例:

1.2.對於字串型別的呼叫

呼叫結果:把值解析成拼音字母,按照首個英文本母順序公升序排列,如果首字母相同,比較第二個的首字母。

示例:

1.3.對於自定義物件的呼叫

呼叫結果:無法完成方法的執行,執行報錯。

示例:

總結:很顯然這個無參的sort()方法很難滿足我們實際開發中需求,對於物件導向程式設計我們,常常就是對集合中的物件進行排序。

二、自定義物件型別預設排序

物件本身不是乙個具體的值,在排序邏輯上顯然要選擇物件的乙個屬性進行排序。

1.1手動設定無參sotr()方法的預設排序邏輯

將list的指定型別的類實現icomparable泛型介面,示例:

1

class student:icomparable2

5public

string name

6public

int age 78

public

intcompareto(student other)

913 }

排序邏輯:this在前面就意味著指定按照這個屬性公升序,如果寫在後面就是降序。呼叫:

listlist_obj = new list,

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);

}

在呼叫sort()方法的時候,就自動呼叫了我們實現介面的compareto方法的邏輯**。

結果如圖:

總結:此方法的實現,雖然解決了可以按照物件屬性進行公升序和降序,但是在實現compareto的方法裡,指定的屬性是固定的。這樣的話顯然

不靈活,那麼下面就介紹另一種方法,解決該問題。

二、自定義物件型別動態排序

預設排序,通過實現icomparable泛型介面來完成。並且在實現comparato介面裡指定排序的屬性是固定的,寫死的。如果功能上有多條件排序(按照年齡、學號等等),預設排序就無法滿足。

1.1為每乙個要排序的屬性寫乙個對應的排序類,乙個排序邏輯對應乙個排序類,示例:

//

按照id公升序

class studentorderby_id_asc:icomparer

}//按照年齡降序

class studentorderby_age_desc:icomparer

}

1.2.呼叫

listlist_obj = new list,

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.3.輸出結果:

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...