首页 > 编程语言 >c#数组案例(较复杂)两个数组合并、去重和取交集

c#数组案例(较复杂)两个数组合并、去重和取交集

时间:2024-10-18 14:46:43浏览次数:3  
标签:arr arr1 c# newArr int Length 重和取 数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01_数组
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 1. 合并两个数组
            int[] list1 = { 1, 2, 3 };
            int[] list2 = { 2, 4, 7 };
            int[] arr = Connect(list1, list2);
            Console.WriteLine(Join(arr));

            // 2.数组元素去重
            int[] list3 = { 2, 4, 6, 4, 6, 7, 2, 1, 9 };
            int[] arr1 = Distinct(list3);
            Console.WriteLine(Join(arr1));

            // 3.两个数组的交集
            int[] list4 = { 3, 5, 7, 2, 5, 3 };
            int[] list5 = { 2, 8, 1, 7, 3 };
            int[] arr2 = Intersection(list4, list5);
            Console.WriteLine(Join(arr2));
            Console.ReadLine();
        }

        static string Join(int[] arr, string link = ",")
        {
            string str = "";
            for (int i = 0; i < arr.Length; i++)
            {
                str += arr[i];
                if (i != arr.Length - 1)
                {
                    str += link;
                }
            }
            return str;
        }


        /// <summary>
        /// 将两个数组连接为一个数组
        /// </summary>
        /// <param name="arr1">要链接的第一个数组</param>
        /// <param name="arr2">要连接的第二个数组</param>
        /// <returns>连接后的新数组</returns>
        static int[] Connect(int[] arr1, int[] arr2)
        {
            int[] newArr = new int[arr1.Length + arr2.Length];
            for (int i = 0; i < arr1.Length; i++)
            {
                newArr[i] = arr1[i];
            }
            for (int i = 0; i < arr2.Length; i++)
            {
                newArr[arr1.Length + i] = arr2[i];
            }
            return newArr;
        }

        /// <summary>
        /// 对数组进行去重
        /// </summary>
        /// <param name="arr">需要去重的数组</param>
        /// <returns>去重之后的数组</returns>
        static int[] Distinct(int[] arr)
        {
            // 去重之后的新数组
            int[] newArr = { };
            for (int i = 0; i < arr.Length; i++)
            {
                // 获取当前元素第一次出现的位置   
                int index = FindFirstIndex(arr, arr[i]);

                // 判断元素是否是第一次出现
                if (index == i)
                {
                    newArr = Add(newArr, arr[i]);
                }
            }
            return newArr;
        }


        /// <summary>
        /// 获取两个数组的交集
        /// </summary>
        /// <param name="arr">数组1</param>
        /// <param name="arr2">数组2</param>
        /// <returns>返回交集的数组</returns>
        static int[] Intersection(int[] arr1, int[] arr2)
        {
            int[] MaxArr = arr1.Length > arr2.Length ? arr1 : arr2;
            int[] MinArr = arr1.Length < arr2.Length ? arr1 : arr2;

            // 存储两个数组中的交集
            int[] newArr = { };
            for (int i = 0; i < MinArr.Length; i++)
            {
                // 获取当前元素在大数据中存储的位置
                int index = FindFirstIndex(MaxArr, MinArr[i]);
                // 判断索引是否存在
                if (index != -1)
                {
                    // 如果存在则说明是交集 就存储到新数组中
                    newArr = Add(newArr, MinArr[i]);
                }
            }
            return newArr;
        }
        static int FindFirstIndex(int[] arr, int value)
        {
            int index = -1;// 索引初始值为 -1 表示没有找到相关元素
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == value)
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
        static int[] Remove(int[] arr, int index)
        {
            if (index >= arr.Length)
            {
                return arr;
            }
            int[] newArr = new int[arr.Length - 1];
            int count = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                if (i != index)
                {
                    newArr[count++] = arr[i];
                }
            }
            return newArr;
        }
        static int[] Add(int[] arr, int item)
        {
            int[] newArr = new int[arr.Length + 1];
            for (int i = 0; i < arr.Length; i++)
            {
                newArr[i] = arr[i];
            }
            newArr[newArr.Length - 1] = item;
            return newArr;
        }

    }
}

标签:arr,arr1,c#,newArr,int,Length,重和取,数组
From: https://blog.csdn.net/2401_86981975/article/details/143017997

相关文章

  • 性能提升:线程池大小与CPU的关系
    前言:线程池可以包含几个线程才能最大化提升整体系统性能,这个与CPU的处理能力有直接关系,线程池的线程数过多则在大多数线程处于等待状态,线程之间的切换反而性能开销变大,拖累整体效率,如果线程池里的线程过小,则没有充分利用CPU的处理能力。一、查看CPU并发处理的线程数 在Linu......
  • javascript渲染OFD的库
    目前使用javascript开发的OFD的渲染库主要有两个:ofd.js和liteofd,其中ofd.js开发比较早,liteofd是最近刚出现的js库。首先结论是ofd.js渲染效果没有liteofd好,因为ofd.js目前有一些效果没有支持,比如对字体没有比较好的解析和支持。liteofd相对ofd.js效果更好,并且提供的接口方法更多......
  • C++缺省参数
    1.缺省参数是什么?在定义函数时给的参数设置默认值,如果在函数调用时没有传入具体的参数,就使用这个默认值。2.为什么要设置缺省参数?方便给函数参数设置默认值,调用函数的代价更小。3.怎么使用缺省参数?在定义函数时,从右往左设置缺省参数,中间不能有间隔。调用函数时,从左往右传入参......
  • [Javascript] Write .call()
    Function.apply.myCall=function(ctx,...args){ctx=ctx===null||ctx===undefined?globalThis:Object(ctx);constfn=this;constkey=Sybmol("fn");//wedon'twantusercansee[Sybmol("key")]inFunctionpro......
  • Java中的Collections类和泛型
    在Java的集合框架中,`Collections`类扮演着一个非常重要的角色。它提供了一系列对集合进行操作的静态方法,这些方法可以用于各种集合类型,如`List`、`Set`和`Map`等,从而方便我们对集合进行诸如排序、查找、反转等操作。##一、排序操作1.**`sort`方法**  -`Collections`类......
  • TH-OCR:强大的光学字符识别工具与车牌识别应用
    在当今数字化的时代,高效准确地识别文本和图像中的字符变得至关重要。TH-OCR(清华OCR)作为一款优秀的光学字符识别软件,以其卓越的性能和广泛的应用场景,受到了众多用户的青睐。其中,车牌识别功能更是在交通管理、智能停车等领域发挥着重要作用。一、TH-OCR简介TH-OCR是由清......
  • IOCTL
    1.ioctl函数内部实现ioctl函数内部实现功能,依靠已经设置好的宏命令CMD_SET_CHENNEL,和应用层传进来的宏匹配,是对应的宏就执行对应的操作,这样的内部宏可以设置非常多种,宏也有自己的定义方式下面有说明。在应用层调用时,自己设置设备数(也叫幻数) 'x',设备编号SET_CHANNEL为1,又......
  • 【芯智雲城】Broadcom(博通)光耦合器选型
    Broadcom(博通)的光耦芯片类型丰富,包括用于低速模拟量、故障检测、功率控制等应用普通的模拟光耦,用于各种数字电路的数字光耦,用于IGBT栅极驱动高速低功耗光耦,以及用于电流检测应用的和高线性度隔离放大器。产品具备高隔离性能、高速传输、低功耗和高可靠性等优点,在电子行业中具有......
  • 【芯智雲城】基于博流MCU的智能门锁解决方案
    一、方案描述芯联的智能门锁解决方案,采用博流MCU和超低功耗BLE,秒开的半导体指纹识别模块,与目前市面上的13.56MHzA/B卡,可以实现钥匙、密码、IC卡、指纹、微信小程序等多种开锁方式,将解决智能门锁产品的诸多痛点和问题,为用户提供无缝、金融级安全的产品体验。二、方案展示......
  • 【芯智雲城】Broadcom博通BCM5389IFBG以太网控制器应用
    Broadcom公司的BCM5389IFBG以太网控制器芯片,适用于独立的千兆以太网交换机和千兆以太网控制平面及背板应用。一、芯片特点集成度高:BCM5389IFBG将数据包缓冲区、SerDes(串行解串器)、媒体访问控制器(MAC)、地址管理和非阻塞交换结构集成到一个0.13µmCMOS器件中,减少了系统的复杂......