集合的列舉和排序

2021-09-06 17:39:08 字數 2005 閱讀 8552

原文

先來看看ienumerable介面的定義:

public

inte***ce

ienumerable

這個介面非常簡單,主要就是乙個方法getenumerator,用來返回乙個ienumerator物件。繼續深入下去,ienumerator介面的定義如下:

public

inte***ce

ienumerator

}

上面的ienumerator介面定義的屬性和方法,只有乙個目的,就是實現如何遍歷。下面具體解釋一下:

當用foreach迴圈來訪問乙個物件的時候,其實是預設的呼叫了物件裡面的getenumerator()方法。而該方法就是由ieumerable介面給暴露出來的,所以如果想自定義乙個能實現列舉功能的集合類就要先實現乙個ienumerable介面,然後實現裡面的getenumerator方法。如下所示:

namespace

test

is going mph

", c.name, c.age);

} console.readkey();

} }

public

class

garage:ienumerable

public

ienumerator getenumerator()

} public

class

car

public

int age

public car( string name, int

age) } }

下面舉乙個例子,這裡我們自定義了乙個類car,然後對car的集合進行排序。

public

class

car

public

int year

public

int seats

}

假如我們直接呼叫sort方法,就好悲劇丟擲invalidopeartionexception異常

icomparable介面

icomparable介面提供了比較某個特定型別物件的方法。這裡來說,我們要讓car實現icomparable介面來達到比較car物件的目的,從而實現排序。實現icomparable介面,就必須實現compareto方法,具體如下:

public

class

car: icomparable

public

int year

public

int seats

public

int compareto(object

obj)

}

上面我們的car物件實現了icomparable介面,按照name字串屬性來比較。直接執行sort()方法,就能夠得到排序結果:

icomparer介面

icomparer介面可以提供更加豐富和靈活的排序功能,它的實現是乙個比較器。比如,你可能需要在不同的場合,根據不同的屬性來排序。

下面就來實現乙個根據car的year屬性來排序。

public

class caryearcomparer: icomparer

}

在呼叫sort方法的時候,需要指定使用的icomparer實現:

cars.sort(new caryearcomparer());
得到的排序結果和上面的根據name屬性不同:

mysql 列舉與集合 mysql列舉和集合型別

列舉和集合型別 列舉 enum 型別,最多可以定義 65535 種不同的字串從中做出選擇,只能並且必須選擇其中一種,占用儲存空間是乙個或兩個位元組,由列舉值的數目決定 集合 set 型別,最多可以有 64 個成員,可以選擇其中的零個到不限定的多個,占用儲存空間是乙個到八個位元組,由集合可能的成員數目...

ATL中的集合和列舉

cool 2004 11 22 11 55 00 類別 vc mfc 中集合和列舉器的關係非常類似於stl中的容器和迭代器的關係。列舉器 如果乙個 物件可以被稱為乙個 集合 那麼很顯然,該物件內部肯定是一些型別相同的資料的集合,當我們要將內部這些資料 暴露 給客戶端使用時,如果直接照搬stl的模式,...

集合排序和比較

hashmapmap maps.newhashmap map.put action action map.put demo demo map.put ass ass 將map的key存入集合 listlist lists.newarraylist map.keyset list集合進行排序 coll...