C 泛型集合自定義比較器實現排序

2021-09-12 15:13:06 字數 2270 閱讀 3777

目錄

需求:根據自定義的類中欄位實現自定義的排序規則。

解決方案:

實現:方法一:該自定義類實現icomparable介面。

方法二:建立比較器類,該類實現介面icomparer

方法三:實現內建comparison委託

總結:

1.public void sort();

使用預設比較器對整個 system.collections.generic.list`1 中的元素進行排序。這裡的預設比較器就是指comparer.default。要使用預設比較器來排序,則類必須實現icomparable介面,排序的時候會呼叫介面的compareto方法

2.public void sort(icomparercomparer);

使用指定的比較器對整個 system.collections.generic.list`1 中的元素進行排序。

3.public void sort(comparisoncomparison);

使用指定的 system.comparison`1,對整個 system.collections.generic.list`1 中的元素進行排序

其中:comparison是.net內建的乙個委託。

原型為: public delegate int comparison(t x, t y);//兩個同型別的輸入引數,乙個整形返回值的簽名。

表示用於比較相同型別的兩個物件的方法。使用委託,可以傳遞乙個與委託簽名相同的函式,可以使用匿名委託,還可以用lambda表示式。

4.public void sort(int index, int count, icomparercomparer);//與方法三大同小異

class studentdata1:icomparable

public int age

public string gender

public studentdata1(int age, string name, string gender)

static void main(string args)

console.writeline("本類實現icomparable介面後");

data.sort();

foreach (var item in data)

console.readkey();

}//對自定義的studentdata1類實現按照年齡,姓名名稱的順序排序

public int compareto(object obj)

else if (this.age < studentdata1.age)

else

}}

//建立比較器類,該類實現介面icomparer,在不修改已有的類,建立自己的比較器類

class studentdatacompare : icomparer

else if (studentdatax.age < studentdatay.age)

else

}}

static void main(string args)

data.sort(new studentdatacompare());

console.writeline("使用自定義的實現icomparer介面的自定義比較類後");

foreach (var item in data)

console.readkey();

}

static void main(string args)

data.sort(compare);//傳入符合簽名的函式

console.writeline("使用自定義的實現icomparer介面的自定義比較類後");

foreach (var item in data)

console.readkey();

}private static int compare(studentdatacomparsion studentdatacomparsion1, studentdatacomparsion studentdatacomparsion2)

else if (studentdatacomparsion1.age > studentdatacomparsion2.age)

else

}

方法一在當前類中進行修改。方法二在不修改已有的類,建立自己的比較器類,比較靈活。其他的比如

利用lamda表示式,匿名函式這裡暫不做介紹。

C 自定義泛型

using system using system.collections.generic using system.text namespace customgenericcollection public car public class sportscar car 其他方法 public cl...

Java集合整理 自定義泛型

泛型是jdk1.5,新新增的特性,其作用是對集合進行 引數化型別 在jdk1.5之前,還沒有泛型這一概念,集合中的元素是object型別,所以,每次使用集合中的元素時,需要將元素向下造型成對應型別才能使用,錯誤的可能性很大,非常的不方便。為了簡化操作,提高效率,便有了泛型這一新特性,有了泛型,集合就...

泛型集合 排序,比較

集合是oop中的乙個重要概念,c 中對集合的全面支援更是該語言的精華之一。為什麼要用泛型集合?在c 2.0之前,主要可以通過兩種方式實現集合 a.使用arraylist 直接將物件放入arraylist,操作直觀,但由於集合中的項是object型別,因此每次使用都必須進行繁瑣的型別轉換。b.使用自定...