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

来源:互联网 发布:移动社交软件 编辑:程序博客网 时间:2024/05/16 19:27

前言


    本篇博客可以用“简单粗暴”来形容,嗯对,就是简单粗暴。小编不久前做的两个项目,都实打实的接触了大数据操作。一个是批量导入,一个是从数据库往外查询,都涉及到了数据去重。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);       }   } 


总结


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

0 0