IComparer与IEqualityComparer的简单使用
場景一:對象列表的自定義排序
簡單類型的列表,可以直接使用Linq的OrderBy或OrderByDescending進行排序,復雜對象的列表排序可以使用Sort()和IComparer實現自定義對象比較規則。假如有一個Box類,它有名稱、長、寬、高四個屬性,如下圖所示:
現在有一個Box對象列表,需要按體積從小到大排序,我們用到List的Sort()方法,該方法要求傳入IComparer對象,如下圖所示:
接著我們定義自己的排序類BoxCubeAscComparer,如下圖所示:
BoxCubeAscComparer類實現IComparer的Compare方法,在方法中進行體積的運算。該方法返回參數為int類型,1表示大于,-1表示小于,0表示等于。如果想實現倒序排序,只要大于的時候返回-1即可,如下圖所示:
定義好上面兩個排序類后,我們在Sort方法中使用,如下圖所示:
運行結果如下 :
場景二:對象列表的自定義去重
簡單類型的列表,可以直接使用Linq的Distinct去重,復雜對象的去重可以使用Distinct()和IEqualityComparer實現自定義兩個對象的比較規則。還是使用上面的Box類,我們要對Box對象列表去重,最后兩個對象只保留一個,如下圖所示:
Distinct()要求我們傳入IEqualityComparer對象,我們定義一個BoxEqualityComparer類,如下圖所示:
重寫Equals和GetHashCode方法,我們在主方法中使用這個類,如下圖所示:
運行后結果:
很簡單的東西,沒啥好說的,希望幫到你~~
總結
以上是生活随笔為你收集整理的IComparer与IEqualityComparer的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在C#中使用 ArrayPool,M
- 下一篇: Visual Studio Snippe