首页 > 其他分享 >Linq通过自定义函数取差集

Linq通过自定义函数取差集

时间:2022-12-23 21:55:05浏览次数:50  
标签:取差集 product Ver 自定义 Three Linq ObjClass new ID

using System;
using System.Collections.Generic;
using System.Linq;

namespace CompareList
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ObjClass[] fruits1 =
            {
                new ObjClass{ ID="张三",Ver="一",Three=1},
                new ObjClass{ ID="张三",Ver="一",Three=1},
                new ObjClass{ ID="张三",Ver="一",Three=1},
                new ObjClass{ ID="张三",Ver="二",Three=1},
                new ObjClass{ ID="李四",Ver="四",Three=1},
                new ObjClass{ ID="李四",Ver="四",Three=1},
                new ObjClass{ ID="李四",Ver="四",Three=1},
                new ObjClass{ ID="王五",Ver="五",Three=1},
                new ObjClass{ ID="王五",Ver="五",Three=1}
            };

            var temp = fruits1.Select((m, i) =>
            {
                m.Index = i;
                return m;
            });

            ObjClass[] fruits2 = temp
                .GroupBy(m => new { m.ID, m.Ver, m.Three }).Select(m => new ObjClass
                {
                    Three = m.Key.Three,
                    ID = m.Key.ID,
                    Ver = m.Key.Ver, 
                    Index = m.First().Index
                }).ToArray();

            // Get all the elements from the first array
            // except for the elements from the second array.

            IEnumerable<ObjClass> except =
                temp.Except(fruits2, new ProductComparer());

            foreach (var product in except)
                Console.WriteLine(product.ID + " " + product.Ver + " " + product.Three);

            Console.ReadLine();

        }
    }

    public class ObjClass
    {
        public int Index { get; set; }
        public string ID { get; set; }
        public string Ver { get; set; }
        public int Three { get; set; }
    }

    // Custom comparer for the Product class
    class ProductComparer : IEqualityComparer<ObjClass>
    {
        // Products are equal if their names and product numbers are equal.
        public bool Equals(ObjClass x, ObjClass y)
        {

            //Check whether the compared objects reference the same data.
            if (Object.ReferenceEquals(x, y)) return true;

            //Check whether any of the compared objects is null.
            if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                return false;

            //Check whether the products' properties are equal.
            return x.ID == y.ID && x.Ver == y.Ver && x.Three == y.Three && x.Index == y.Index;
        }

        // If Equals() returns true for a pair of objects
        // then GetHashCode() must return the same value for these objects.

        public int GetHashCode(ObjClass product)
        {
            //Check whether the object is null
            if (Object.ReferenceEquals(product, null)) return 0;

            //Get hash code for the Name field if it is not null.
            int hashProductName = product.ID == null ? 0 : product.ID.GetHashCode();

            //Get hash code for the Code field.
            int hashProductCode = product.Ver.GetHashCode();

            int hashThree = product.Three.GetHashCode();

            int hashIndex = product.Index.GetHashCode();

            //Calculate the hash code for the product.
            return hashProductName ^ hashProductCode ^ hashThree ^ hashIndex;
        }
    }
}

 

标签:取差集,product,Ver,自定义,Three,Linq,ObjClass,new,ID
From: https://www.cnblogs.com/superfeeling/p/17001707.html

相关文章

  • mybatis拦截器 + 自定义注解 + 获取注解的属性
    背景mybatis拦截器+自定义注解——这种方式可以为我们解决很多事情,带来很多便利,但有时候会在自定义注解上配置一些属性,并且拦截器上要拿到这些属性的值。这个时候,我们......
  • 【数据结构】五分钟带你了解及自定义有向图
    前言什么是有向图在数学中,一个图(Graph)是表示物件与物件之间的关系的方法,是图论的基本研究对象。一个图看起来是由一些小圆点(称为顶点或结点)和连结这些圆点的直线或曲线(......
  • WPF自定义界面WindowChrome
    默认WPF的界面其实也还行,就是满足不了日渐增长的需求,界面还是需要有更高的自定义程度,包括标题栏也要能够塞下更多的操作控件。默认窗口介绍#新建WPF项目,给里面内容设置......
  • 使用linq子查询
     子查询法一:使用linq语句//获得核算科室编号IEnumerable<string>s=(fromaindb.Fee_Deptswherea.院......
  • Bash自定义函数numbeep:Cygwin、Mintty窗口重复响铃并闪烁以提示新信息
    概述:有时候会碰到这样的场景,在Cygwin或MSYS2环境下工作,执行一个耗时较长的任务(eg:gcc编译、rsync同步等等...),我们不想长时间保持窗口激活状态在前台苦等任务运行结束,窗口切......
  • SpringBoot2.x系列教程25--整合SpringMVC之欢迎页面与自定义Favicon
    SpringBoot2.x系列教程25--整合SpringMVC之欢迎页面与自定义Favicon作者:一一哥一.SpringBoot设置欢迎页面1.默认欢迎页的源码在SpringBoot中,默认的欢迎界面是index.html,那......
  • SpringBoot2.x系列教程10--小花样之SpringBoot配置自定义Banner
    SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner作者:一一哥一.SpringBoot常用配置本章节主要介绍一下SpringBoot中的一些常用配置,比如:自定义Banner、配......
  • FastDFS客户端与自定义文件存储系统
    本文的前提是已经启动FastDFS的tracker和storage安装安装提供给大家的fdfs_client-py-master.zip到虚拟环境中 pipinstallfdfs_client-py-master.zip 链接:ht......
  • 自定义python Django文件存储系统
    在学习Django框架的时候,我们已经讲过,Django自带文件存储系统,但是默认文件存储在本地,在本项目中,我们需要将文件保存到FastDFS服务器上,所以需要自定义文件存储系统。自定义......
  • Vue 自定义事件
    组件的自定义事件使用场景A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)绑定自定义事件在父组件中:<HelloWorld@customEv......