C# LINQ去重複雜型別物件集合
通過使用LINQ方法語法中的Distinct(),可以去重簡單型別集合,如:int、string等。
但如果要去重複雜型別集合,那麼 直接呼叫Distinct()方法是不行的。幸運的是,Distinct()方法可以新增自定義比較方式,簡單型別的去重無非就是型別比較,因為型別簡單索性.NET就幫我們直接實現了,但複雜型別就不行了,一般複雜型別都是自定義的,比如類、結構體等,對此我們只需要自己實現一個繼承IEqualityComparer<T>介面的比較方法,然後新增到Distinct()中即可。
上程式碼:
自定義複雜型別:
實現繼承IEqualityComparer<T>介面的比較方法:class Student { private int _id; private string _name; public int ID { get{return _id;} set{_id = value;} } public string Name { get{return _name;} set{_name = value;} } public Student(int i,string s) { _id = i; _name = s; } }
class StudentCompare: IEqualityComparer<Student> { public bool Equals(Student x, Student y) { if (x.ID== y.ID&& x.Name== y.Name) { return true; } else { return false; } } public int GetHashCode(item obj) { if(obj == null) return 0; else return obj.ToString().GetHashCode(); } }
Distinct()中使用即可:
static void Main(string[] args) { List<Student> list = new List<Student>() { new Student() { ID = 1, Name = "Tom" }, new Student() { ID = 2, Name = "Jim" }, new Student() { ID = 1, Name = "Tom" }, new Student() { ID = 3, Name = "Jon" } }; var temp = list.Distinct(new StudentCompare()).ToList(); foreach (var item in temp) { Console.WriteLine("{0} {1}",item.ID,item.Name); } Console.Read(); }
第二種方法:
t = t.Where(s => t.Where(a => s.id == a.id && s.name == a.name).Count() > 1).Distinct().ToList();
相關推薦
C# LINQ去重複雜型別物件集合
通過使用LINQ方法語法中的Distinct(),可以去重簡單型別集合,如:int、string等。但如果要去重複雜型別集合,那麼 直接呼叫Distinct()方法是不行的。幸運的是,Distinct()方法可以新增自定義比較方式,簡單型別的去重無非就是型別比較,因為型別簡單
c# List去重
pre ring c# pub class rem string div () public static void Purge(ref List<string> needToPurge) { for (int i
C++ vector去重 交集 並集
原文: yongh701 https://blog.csdn.net/yongh701/article/details/51406458 C++雖然對vector封裝了大量的函式,比如判斷元素是否在vector中find、去重的unique,還有在algorithm類中對兩
ES6陣列去重的方法(方法集合)
方法一: function unique(arr) { const res = new Map(); return arr.filter((a) => !res.has(a) &
C++陣列去重
基本方法:定義一個新陣列,然後將元素組一一和新陣列的元素對比,若不同則存放在新陣列中。 #include <iostream> using namespace std; int main() { int a[10] = { 0,1,1,0,2,3,2,4
HashSet中儲存複雜型別物件
這個話題還是從一個有問題的程式碼中引申出來的,原始碼如下: import java.util.*; class TreeSetTest { public static void main(String[] args) { HashSet
C語言的一些複雜型別宣告
一些比較複雜的宣告例項(C Primer Plus中的例子) 陣列後面的[]和函式名後面的()具有相同的優先順序,它們比*的優先順序高。 都是從左往右結合。 int board[8][8]; int ** ptr; //一個指向指標的指標,每個
兩個list集合去重,一個list集合去重
/** * 集合的去重 * @param list1 要保留的集合 * @param list2 * @return */ public static List<String> removeAll(List<S
JSON陣列去重,list陣列物件進行去重
js對json陣列去重 /* * JSON陣列去重 * @param: [array] json Array * @param: [string] 唯一的key名,根據此鍵名進行去重 */ uniqueArray:function (array, k
c# ArrayList去重
注: 1.第一部分是昨天寫的,未深入探討Arraylist機制(雖然現在理解的也不多); 2.第二部分是今天在做完水準網間接平差後的操作。因為去重在網上沒找到合適的方案,於是自己做了實驗,簡單總結了下Arraylist的去重操作。
陣列去重,根據物件屬性去重
var arry=[{ name:"zhangsan", age:12 },{ name:"zhangsan", age:12 },{ name:"lisi", age:12 },{ name:"wangwu", age:12 }] var
C# List去重的三種方法(轉)
sta string duplicate lambda表達式 nts linq pac distinct fontsize 三種去重的方法 1、List中的元素實現IEquatabe接口,並提供Equals方法和GetHashCode方法。 2、使用表達式 [csha
一個關於Linq對引用型別元素集合去重問題的思考
背景 說到對集合去重處理,第一時間想到的肯定是Linq的Distinct擴充套件方式,對於一般的值型別集合去重,很好處理,直接list.Distinct()即可。但是如果想要對一個引用型別的集合去重(屬性值都相同就認為重複),就會發現,直接Distinct()是不行的: public class User
【轉】C# Linq 交集、並集、差集、去重
log .cn pre tin nio clas int except post 轉自: https://www.cnblogs.com/wdw31210/p/4167306.html using System.Linq; List<string&
C# List集合去重使用lambda表達式
重復 center font per aci clas select pad -a name age sex Lucy 22 woman Lily 23 woman Tom 24 man Lucy 22 woman Lily 23 woman
c# 自動實現屬性 隱式型別 物件及集合初始化 匿名型別
Demo using System; using System.Collections.Generic; namespace IntelligentCompiling { class Program { static void Main(str
C# List集合去重使用lambda表示式
name age sex Lucy 22 woman Lily 23 woman Tom 24 man
集合去重 (集合元素為引用型別)--- java 8 新特性 --- 根據元素單屬性、多屬性實現去重
1. 程式碼寫法: (要求 JDK 1.8 或 1.8 以上) package gentle.entity; import lombok.Data; /** * * @author sile
js對數組裡的基礎型別和物件去重
1. 單元素去重 //1. 雙重迴圈去重 var array = [1, 1, '1', '1',NaN,NaN]; function unique(array) { // res用來儲存結果
C# Linq 交集、並集、差集、去重
using System.Linq; List<string> ListA = new List<string>(); List<string> ListB = new List<string>(); List<string> ListRe