首页 > 编程语言 >关于集合的扩展 C#

关于集合的扩展 C#

时间:2023-12-26 14:45:57浏览次数:27  
标签:compareCond return C# List 扩展 item result 集合 ForEach

/// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sources"></param>
        /// <param name="details"></param>
        /// <param name="mdRelation"></param>
        /// <returns></returns>
        public static List<T> Intersect<T>(this List<T> sources, List<T> details, Func<T, T, bool> compareCond)
        {
            List<T> result = new List<T>();
            sources?.ForEach(item =>
            {
                details?.ForEach(detail =>
                {
                    if (compareCond(detail, item))
                    {
                        result.Add(item);
                        return;
                    }
                });
            });

            return result;
        }

        /// <summary>
        /// 取差集合 A-B,A集合中有B集合中无的
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sources"></param>
        /// <param name="details"></param>
        /// <param name="compareCond"></param>
        /// <returns></returns>
        public static List<T> Expect<T>(this List<T> sources, List<T> details, Func<T, T, bool> compareCond)
        {
            List<T> result = new List<T>();
            sources?.ForEach(item =>
            {
                if (!details.Exist<T>(item, compareCond))
                {
                    result.Add((T)item); 
                }
            });

            return result;
        }


        /// <summary>
        /// 取并集(A和B取并集,共通的项目选A)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <param name="entity"></param>
        /// <param name="compareCond"></param>
        /// <returns></returns>

        public static List<T> Union<T>(this List<T> source, List<T> target, Func<T, T, bool> compareCond)
        {
            List<T> result = new List<T>();
            result.AddRange(source);
            target?.ForEach(item =>
            {
                if (!target.Exist<T>(item, compareCond))
                {
                    result.Add(item);
                }
            });

            return result;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static bool Exist<T>(this List<T> source, T entity,Func<T, T, bool> compareCond)
        {
            bool bExist = false;
            source.ForEach(item =>
            {
                if (compareCond(item, entity))
                {
                    bExist = true;
                    return;
                }
            });
            return bExist;
        }

  

标签:compareCond,return,C#,List,扩展,item,result,集合,ForEach
From: https://www.cnblogs.com/volts0302/p/17928072.html

相关文章

  • android蓝牙取sbc音频数据
    https://blog.csdn.net/u010481276/article/details/86545272两种方法:方法1:dumpaudio数据Bluedroid协议栈中把bt_target.h中的宏DUMP_PCM_DATA打开,发送到bluetoothHAL层的pcm数据被保存在手机的/data/misc/bluedroid/output_sample.pcm格式。可以用cooleditpro工具分析PCM......
  • maven toolchains 简单说明
    很多时候我们项目可以会包含需要不同jdk构建,比如有些只能使用jdk8,有些需要使用jdk11,toolchains可以帮助我们解决此问题一般玩法创建一个toolchains.xml目录,放到home目录下,里边配置实际需要的jdk版本(我们的环境可以安装多jdk)项目构建的时候(使用的插件)使用配置的工具参考配置......
  • cargo-make rust 任务执行以及构建工具
    再学习nakago框架的时候发现其使用了cargo-make这个工具,但是很方便,类似make的构建模式包含的特性依赖管理,别名支持,支持workspace简单使用安装cargoinstall--forcecargo-make参考使用创建一个cargo项目 cargonewappdemoMakefile.toml文件cargonewappdemoMakefile.to......
  • pnpm切换源后报错ERR_PNPM_REGISTRIES_MISMATCH
    工具都是有利有弊,使用pnpm过程中经常会出现一个错误:Thismodulesdirectorywascreatedusingthefollowingregistriesconfiguration:{"default":"https://registry.npmjs.org/"}.Thecurrentconfigurationis{"default":"https://registry.npm.taob......
  • 【源码系列#04】Vue3侦听器原理(Watch)
    专栏分享:vue2源码专栏,vue3源码专栏,vuerouter源码专栏,玩具项目专栏,硬核......
  • C++U4-第10课-前缀和与差分
    学习目标 前缀和解决的问题 前缀和概念 前缀和构建方式  前缀和主要解决区间求和问题练习题1:[前缀和]【算法分析】前缀和数组s的含义是s[i]表示a[1]~a[i]的和,那么∑i=li=r​a[i]=s[r]−s[l−1]。【参考代码】#include<iostream>usin......
  • wpf + LiveCharts.wpf 做个漂亮的图表
    十年河东,十年河西,莫欺少年穷学无止境,精益求精参考:WPFLiveChart图表详解接着上一篇博客: wpf+MaterialDesign+Prism8实现导航功能 1、项目引入图表包 2、定义用户控件IndexView的IndexViewModel,如下usingLiveCharts;usingPrism.Mvvm;usingSystem;usingSystem.Col......
  • css3
    1、新增选择器是css技术的升级版本,在css2的基础上,新增了许多特性,弥补了css2的不足,使web页面的开发变得更加高效、便捷css3按模块化进行设计,比较重要的css3模块包含、选择器、框模型、背景和边框、文本效果、2D|3D转换、动画、多列布局、用户界面css3优点:CSS3是完全向后兼容,......
  • CH32V307 DHCP例程介绍
    1、DHCP概述DHCP,全称为DynamicHostConfigurationProtocol,动态主机配置协议,该协议允许服务器向客户端动态分配IP地址和配置信息,实现了自动设置IP地址、统一管理IP地址分配,简单理解为实现即插即用。 2、例程介绍main函数内容如下: /**********************************......
  • 分享两种Pulsar消息积压topic级别策略老化办法
    本文分享自华为云社区《Pulsar消息积压topic级别策略老化的两种方案》,作者:张俭。Pulsar像大多数消息中间件一样,支持按时间和大小对消息积压进行老化。但是默认的策略只能在namespace级别配置。本文将介绍如何在topic级别实现老化策略的两种方案。方案一:开启TopicLevelPolicy......