1. 程式人生 > 其它 >C# List去重的幾種方法

C# List去重的幾種方法

List<User> users = new List<User>();  
users.Add(new User("張三", "永豐路299號"));  
users.Add(new User("張三", "上地西路8號"));//重複項,去重後將刪掉  
users.Add(new User("李四", "海鷹路甲一號"));  

第一種用字典篩選
Dictionary<string,User> dic = new
Dictionary<string,User>();
users.ForEach(s=>{if(!dic.ContainsKey(s.name)) dic[s.name]=s;})


第二種使用
users.Where((x,i)=>users.FindIndex(s=>s.name==x.name)==i).ToList();
這條語句返回結果只保留這個List中重複的元素的第一個(name相同認為重複)

第三種 自定義去重器

public class Compare:IEqualityComparer<User>
{
  public bool Equals(User x,User y)
{
   return x.name == y.name;//可以自定義去重規則,此處將name相同的就作為重複記錄,不管其他是什麼
//return (t1.Name== t2.Name && t1.Sex== t2.Sex && t1.Age== t2.Age);
}
public int GetHashCode(User ovj)
{
return obj.name.GetHashCode();
//return t.ToString().GetHashCode();
}
}
users.Distinct(new Compare()).ToList();