c 物件集合去重 C List集合去重操作注意點

2021-10-17 01:57:59 字數 1047 閱讀 3297

今天除錯**時發現list的distinct方法在對引用型別操作時並沒有去重,後來查閱資料發現list去重操作物件集合時比較的是物件的乙個個引用位址,

因為集合裡的物件都是乙個個單獨的例項,所以並不會把內容相同的元素去掉,要想真正去重還是要自己寫方法篩選,但是值型別集合的就可以直接操作,包括unoin,intersect方法。

當預設distinct方法不滿足需求時,可以使用他的過載方法自定義乙個比較器實現iequalitycomparer介面就行了

這是乙個在網上找的可拓展的泛型去重方法

/// 可拓展的list物件集合去重比較器

/// 要去重的物件類

/// 自定義去重的字段型別

public class compare : iequalitycomparer

private func _getfield;

public compare(func getfield)

this._getfield = getfield;

public bool equals(t x, t y)

return equalitycomparer.default.equals(_getfield(x), _getfield(y));

public int gethashcode(t obj)

return equalitycomparer.default.gethashcode(this._getfield(obj));

/// 自定義distinct擴充套件方法

/// 要去重的物件類

/// 自定義去重的字段型別

/// 要去重的物件

/// 獲取自定義去重字段的委託

public static ienumerable mydistinct(this ienumerable source, func getfield)

return source.distinct(new compare(getfield));

呼叫方式是 list.mydistinct(s => s.activityid).tolist() //可以傳委託也可以是匿名方法(lamda表示式)

List集合去重

第一種 list每remove掉乙個元素以後,後面的元素都會向前移動,此時如果執行i i 1,則剛剛移過來的元素沒有被讀取。string str1 newstring abcde1 string str2 newstring abcde2 string str3 newstring abcde3 s...

List集合去重

首先,我們都知道list集合是乙個儲存有序可重複元素的容器,那麼如果要對乙個list去重有哪些方法呢?方式一 迴圈list中的所有元素然後刪除重複 public static list removeduplicate list list return list public static list ...

c 物件集合去重 《C 程式設計入門》概覽

前言 01 c 簡介 c 程式設計入門 01 c 簡介 02 整合開發環境 c 程式設計入門 02 c 整合開發環境 04 c 資料型別 c 程式設計入門 04 c 資料型別 05 c 型別轉換 06 c 變數 常量 07 c 運算子和表示式 08 c 迴圈結構列印各種圖形 09 c 陣列,集合 1...