大数据去重,你还在发愁吗?

前言

 

    本篇博客可以用“简单粗暴”来形容,嗯对,就是简单粗暴。小编不久前做的两个项目,都实打实的接触了大数据操作。一个是批量导入,一个是从数据库往外查询,都涉及到了数据去重。Excel批量导入的去重,在《Excel批量导入如何做数据去重》这篇博客中已经介绍过了,下面就介绍下从数据库往外查询的数据去重。

 

背景

 

    ITOO云平台,用户登录时要判断该用户能看到的系统或者界面,下面简称用户资源。一个用户有不同身份,不同身份拥有不同资源,那么当用户登录的时候,这些资源应该怎么处理呢?小编是这么处理的,不同的身份有不同的资源,这些资源可能有重叠,也可能不一样,所以这个用户登录时,就加载该用户所有身份,查出所有身份拥有的资源,如果有重复就去重,有不同的资源就一起加载。

 

实现方式

 

    因为当前用的都是泛型集合,所以就直接用泛型集合来去重了。

 

1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。

 

class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重  
	{  
	   public string name { get; set; }  
	   string address;  
	  
	   public User(string _name, string _address)  
	   {  
	       name = _name;  
	       address = _address;  
	   }  
	  
	   public override string ToString()  
	   {  
	       return string.Format("name:{0},\taddress:{1}", name, address);  
	   }  
	  
	   public bool Equals(User other)  
	   {  
	        return this.name == other.name;  
	   }  
	   public override int GetHashCode()  
	   {  
	       return name.GetHashCode();  
	   }  
	}  
}  
List<User> nonDuplicateList1 = users.Distinct().ToList();

 

 

2、用Lambda表达式去重

 

 

List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList()

 

 

3、用循环方式去重

 

 

List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重  
foreach(User user in users)  
{  
     if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)  
     {  
            nonDuplicateList3.Add(user);  
     }  

 } 

 

 

总结

 

    作为一个后台开发人员,与数据库打交道的同时是离不开数据去重的。在做这个判断的时候,还涉及到一个问题,就是我想根据该用户登录的时间和地点等不同,猜测他有哪些身份,从而加载相应的资源,而不是将他所拥有的资源全部加载过来,但是怎么知道当前用户想以哪个身份登录呢?这也算人能做的了,但是计算机做不了的事情吧。希望各路大牛,给出一些做过的权限控制方面的经验,指点一下我这个菜鸟。

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值