C# 中实现对List中的数据查重操作

Posted nuomibaibai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 中实现对List中的数据查重操作相关的知识,希望对你有一定的参考价值。

一、列表查重操作核心如下
1.1、常用列表的查重操作核心如下:

//查找出列表中的所有重复元素
      private static List<string> QueryRepeatElementOfList(List<string> list)
      
          List<string> listTmp = new List<string>();
          if (list!=null && list.Count>0)
          
              listTmp = list.GroupBy(x => x)
                            .Where(g => g.Count() > 1)
                            .Select(y => y.Key)
                            .ToList();
          
          return listTmp;
      

  
      //查找出列表中的所有重复元素及其重复次数
      private static Dictionary<string, int> QueryRepeatElementAndCountOfList(List<string> list)
      
          Dictionary<string,int> DicTmp = new Dictionary<string, int>();
          if (list != null && list.Count > 0)
          
              DicTmp = list.GroupBy(x => x)
                           .Where(g => g.Count() > 1)
                           .ToDictionary(x => x.Key, y => y.Count());
          
          return DicTmp;
      

1.2、类列表的查重数据操作核心如下

//静态扩展类(实现对类重复内容的操作)
   public static class Extention
   
       public static IEnumerable<T> GetMoreThanOnceRepeatInfo<T>(this IEnumerable<T> extList, Func<T, object> groupProps) where T : class
        //返回第二个以后面的重复的元素集合
           return extList
               .GroupBy(groupProps)
               .SelectMany(z => z.Skip(1)); //跳过第一个重复的元素
       
       public static IEnumerable<T> GetAllRepeatInfo<T>(this IEnumerable<T> extList, Func<T, object> groupProps) where T : class
       
           //返回所有重复的元素集合
           return extList
               .GroupBy(groupProps)
               .Where(z => z.Count() > 1) 
               .SelectMany(z => z);
       
   

二、使用方法

 
 //货物信息
    class GoodsInfo
    
        public string Code  get; set; 
        public string Name  get; set; 
        public string Position  get; set; 
 
        public GoodsInfo()
        
                
        
 
        public GoodsInfo(string code,string name,string position)
        
            this.Code = code;
            this.Name = name;
            this.Position = position;
        
    
 
  class Program
    
        static void Main(string[] args)
        
            Console.WriteLine();
            Console.WriteLine("------------------列表操作-------------------------");
            //初始化列表
            List<string> listTmp = InitList();
 
            //查找出列表中的所有重复元素
            List<string> repeatList = QueryRepeatElementOfList(listTmp);
            if (repeatList!=null && repeatList.Count>0)
            
                Console.WriteLine("---当前所有的重复元素为:---");
                foreach (var item in repeatList)
                
                    Console.WriteLine(item);
                
            
 
            //查找出列表中的所有重复元素
            Dictionary<string, int> repeatEleAndCountDic = QueryRepeatElementAndCountOfList(listTmp);
            if (repeatEleAndCountDic != null && repeatEleAndCountDic.Count > 0)
            
                Console.WriteLine("---当前所有的重复元素个数为:---");
                foreach (var item in repeatEleAndCountDic)
                
                    Console.WriteLine("重复内容为:"+item.Key+ " 重复次数为:"+item.Value);
                
            
 
            List<int> IntTmp = new List<int>  10, 20, 30, 20, 50,10 ;
            int Sum = IntTmp.Sum();
            Console.WriteLine("---获取列表的和:0",Sum);
            double Average = IntTmp.Average();
            Console.WriteLine("---获取列表的平均数:0", Average);
            int Max = IntTmp.Max();
            Console.WriteLine("---获取列表的最大值:0", Max);
            int Min = IntTmp.Min();
            Console.WriteLine("---获取列表的最小值:0", Min);
            List<int> DistinctInfo = IntTmp.Distinct().ToList();
            foreach (var item in DistinctInfo)
            
                Console.WriteLine("---获取列表的不重复数据:0", item);
            
           
 
            Console.WriteLine();
            Console.WriteLine("-------------------类列表操作---------------------------");
            //初始化类列表
            List<GoodsInfo> goodsInfos = InitGoodsInfoList();
 
            //查询到列表中的所有重复数据
            List<GoodsInfo> AllRepeatGoodsInfos = QueryAllRepeatInfoOfList(goodsInfos);
            if (AllRepeatGoodsInfos!=null && AllRepeatGoodsInfos.Count>0)
            
                Console.WriteLine("---当前【满足(名称与位置相同)条件】所有的重复的货物信息为:---");
                foreach (var item in AllRepeatGoodsInfos)
                
                    Console.WriteLine("编号:0,名称:1,位置:2",item.Code,item.Name,item.Position);
                
            
 
            //查询到列表中重复一次以上的数据
            List<GoodsInfo> RepeatMoreThanOnceGoodsInfos = QueryMoreThanOnceInfoList(goodsInfos);
            if (RepeatMoreThanOnceGoodsInfos != null && RepeatMoreThanOnceGoodsInfos.Count > 0)
            
                Console.WriteLine("---当前【满足(名称相同)条件】所有的重复一次以上的货物信息为:---");
                foreach (var item in RepeatMoreThanOnceGoodsInfos)
                
                    Console.WriteLine("编号:0,名称:1,位置:2", item.Code, item.Name, item.Position);
                
            
 
            Console.ReadLine();
        
 
 
        #region   列表操作
 
        //初始化一个列表
        private static List<string> InitList()
        
            List<string> listTmp = new List<string>();
            string str = "101";
            for (int i = 0; i < 3000; i++)
            
                string strTmp = str + i;
                switch (strTmp)
                
                    case "10112":
                    case "10118":
                    case "10124":
                        strTmp = "10107";
                        break;
                    case "10126":
                    case "10137":
                    case "10138":
                    case "10149":
                        strTmp = "10111";
                        break;
                    default:
                        break;
                
                listTmp.Add(strTmp);
 
            
 
            return listTmp;
        
 
 
 
        //查找出列表中的所有重复元素
        private static List<string> QueryRepeatElementOfList(List<string> list)
        
            List<string> listTmp = new List<string>();
            if (list!=null && list.Count>0)
            
                listTmp = list.GroupBy(x => x)
                              .Where(g => g.Count() > 1)
                              .Select(y => y.Key)
                              .ToList();
            
            return listTmp;
        
 
    
        //查找出列表中的所有重复元素及其重复次数
        private static Dictionary<string, int> QueryRepeatElementAndCountOfList(List<string> list)
        
            Dictionary<string,int> DicTmp = new Dictionary<string, int>();
            if (list != null && list.Count > 0)
            
                DicTmp = list.GroupBy(x => x)
                             .Where(g => g.Count() > 1)
                             .ToDictionary(x => x.Key, y => y.Count());
            
            return DicTmp;
        
 
        #endregion
 
 
        #region   类操作
 
        //初始化类列表
        private static List<GoodsInfo> InitGoodsInfoList()
        
            List<GoodsInfo> goodsInfos = new List<GoodsInfo>()
            
                new GoodsInfo("10101","海尔冰箱","0102"),
                new GoodsInfo("10102","海尔电视","0103"),
                new GoodsInfo("10103","海尔空调","0104"),
                new GoodsInfo("10104","海尔净化器","0105"),
                new GoodsInfo("10105","海尔冷风机","0106"),
 
            ;
 
            GoodsInfo goodsInfo1 = new GoodsInfo("10106", "海尔冰箱", "0102");
            GoodsInfo goodsInfo2 = new GoodsInfo();
            goodsInfo2.Code = "10108";
            goodsInfo2.Name = "海尔净化器";
            goodsInfo2.Position = "0108";
 
            goodsInfos.Add(goodsInfo1);
            goodsInfos.Add(goodsInfo2);
 
            return goodsInfos;
 
        
 
        //查询到列表中的所有重复数据(条件为:名称与位置相同)
        private static List<GoodsInfo> QueryAllRepeatInfoOfList(List<GoodsInfo> goodsInfos)
        
            List<GoodsInfo> goodsInfoTmpList = new List<GoodsInfo>();
 
            if (goodsInfos!=null && goodsInfos.Count>0)
            
                goodsInfoTmpList=goodsInfos.GetAllRepeatInfo(x => new  x.Name, x.Position )
                                           .ToList();
                         
            
            return goodsInfoTmpList;
        
 
        //查询到重复了一次以上的数据
        private static List<GoodsInfo> QueryMoreThanOnceInfoList(List<GoodsInfo> goodsInfos)
        
            List<GoodsInfo> goodsInfoTmpList = new List<GoodsInfo>();
 
            if (goodsInfos != null && goodsInfos.Count > 0)
            
                goodsInfoTmpList = goodsInfos.GetMoreThanOnceRepeatInfo(x => new  x.Name)
                                           .ToList();
 
            
            return goodsInfoTmpList;
        
 
        #endregion
 
 
    //Class_end

三、结果如下:

参考:https://blog.csdn.net/xiaochenXIHUA/article/details/107020130

Java中实现对集合中对象按中文首字母排序

有一个person对象如下:

public class Person {
    private String id;private String nam;
}

一个list集合如下:

List<Employee> personList= Arrays.asList(
            new Person("1",“张小同"),
            new Person("2",”靖大同"),
            new Person("3",”王五"),
            new Person("4",”赵三"),
            new Person("5",”刘小刀")
    );

按中文首字母排序:

public void sort(List<Person> personList){
//获取中文环境
            Comparator comparator = Collator.getInstance(Locale.CHINA);
//进行排序 Collections.sort(personList, (p1, p2)
-> { return comparator.compare(p1.getName(), p2.getName()); });
//打印结果
        personList.stream().forEach(System.out::println); 
}

注意,如果name这个字段有英文,那么将排到所有汉字前面,总体来说,优先级是:英文字母>汉字。

 

 

 

 

 

以上是关于C# 中实现对List中的数据查重操作的主要内容,如果未能解决你的问题,请参考以下文章

php页面中实现对数据库的操作

如何在 RecyclerView 的 CardView 中实现对 Item Click 的操作以显示结果

Java中实现对集合中对象按中文首字母排序

php 如何在HTML页面中实现对数据库表数据的增删改查

delphi 请问如何在SQL语句中实现对 Binary 类型的位运算?

如何在 Postgresql 中实现对复杂嵌套 JSONB 的全文搜索