首页 程序笔记 C# List取交集的三种方法及性能对比

C# List取交集的三种方法及性能对比

在C#中,如果你想从一个List中取另一个List的交集,你可以使用几种不同的方法。以下是三种常见的方法:

1 使用LINQ的Intersect方法

Intersect是LINQ提供的一个方法,它可以直接用于获取两个集合的交集。

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

class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
        List<int> list2 = new List<int> { 4, 5, 6, 7, 8 };

        var intersection = list1.Intersect(list2).ToList();

        Console.WriteLine("Intersection using LINQ Intersect:");
        foreach (var item in intersection)
        {
            Console.WriteLine(item);
        }
    }
}

2 使用HashSet

HashSet是一个不包含重复元素的集合,可以用来进行集合运算,包括交集。

using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
        List<int> list2 = new List<int> { 4, 5, 6, 7, 8 };

        HashSet<int> set1 = new HashSet<int>(list1);
        HashSet<int> set2 = new HashSet<int>(list2);

        var intersection = new HashSet<int>(set1.Intersect(set2));

        Console.WriteLine("Intersection using HashSet:");
        foreach (var item in intersection)
        {
            Console.WriteLine(item);
        }
    }
}

3 使用双重循环

虽然这种方法在效率上可能不如LINQ或HashSet,但对于学习目的或者小集合来说,它仍然是一个可行的方法。

using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
        List<int> list2 = new List<int> { 4, 5, 6, 7, 8 };
        List<int> intersection = new List<int>();

        foreach (var item1 in list1)
        {
            foreach (var item2 in list2)
            {
                if (item1.Equals(item2))
                {
                    intersection.Add(item1);
                    break; // 找到匹配的项后,跳出内层循环
                }
            }
        }

        // 去除可能的重复项(如果交集中有重复数字)
        intersection = intersection.Distinct().ToList();

        Console.WriteLine("Intersection using nested loops:");
        foreach (var item in intersection)
        {
            Console.WriteLine(item);
        }
    }
}

请注意,双重循环方法在处理大集合时效率较低,因为它需要进行n*m次比较,其中n和m分别是两个集合的大小。而LINQ的Intersect方法和HashSet方法通常会有更好的性能,特别是当处理大型数据集时。

站心网

在C#中,如果你想从一个List中取另一个List的交集,你可以使用几种不同的方法。以下是三种常见的方法: 1 ..

为您推荐

软件产品开发中常见的10个问题及处理方法

常见的10个问题#产品开发中常见的10个问题思维导图需求相关#1. 需求不明确#在日常工作中,需求来源于用户、老板、客户、竞品分析、业务部门、产品经理等,这些人或部门会提出需求,因为他们不是产品经理,提出的需求..

一个提升运营/营销转化率的万能方法!

之前,笔者有分享过说我最喜欢的增长是可复制可持续的增长,它一般都会有三个关键过程:首先是小范围测试,低成本试错,也就是最小可行性验证,让ROI最大化。然后是把测试的最优结果整理为可执行的标准化化流程。前..

千万级的大表,如何做性能调优?

前言大表优化是一个老生常谈的话题,但随着业务规模的增长,总有人会“中招”。很多小伙伴的数据库在刚开始的时候表现良好,查询也很流畅,但一旦表中的数据量上了千万级,性能问题就开始浮现,查询慢、写入卡、分页..

学习最重要是方法,管理最重要是高度

技术学习要兼顾深度和广度夯实技术基础这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你..

Java中String类常见的方法

以下介绍字符串常见的几个方法。介绍String类在 Java 中,String类是一个代表字符串的类,具有以下特性:不可变性:String对象一旦被创建就是不可变的,即它们的值在创建后不能被更改。任何对String对象的修改操作实..

.net 通过 HttpClient 下载文件同时报告进度的方法

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..

GreenSock: 高性能的 HTML5 动画库

在现代网页开发中,动画已经成为提升用户体验的关键元素。无论是滚动效果、页面切换、按钮点击还是复杂的交互动画,良好的动画效果不仅能吸引用户,还能使界面更加生动、易用。GreenSock(GSAP,GreenSock Animation..

Elasticsearch性能优化干货

1、集群规划优化实践1.1 基于目标数据量规划集群在业务初期,经常被问到的问题,要几个节点的集群,内存、CPU要多大,要不要SSD?最主要的考虑点是:你的目标存储数据量是多大?可以针对目标数据量反推节点多少。1.2..

冒泡排序和选择排序对比

1、冒泡排序:冒泡排序这种方法的基本思想是,将待排序(未排序序列)的记录看作是竖着排列的“气泡”,键值较小(数值较大)的记录比较轻,从而要往上浮。在冒泡排序算法中要对这个“气泡”序列处理若干遍。所谓一..

5个高性能 .NET Core 图片处理库推荐

在使用 .NET Core 开发中,图片处理是一个常见需求,如图像缩放、裁剪、格式转换和添加水印等。以下是一些推荐的 .NET Core 图片处理库,它们功能强大且支持多种图像处理功能:1. ImageSharp简介:ImageSharp 是一个..

javascript 6种连接数组的方法和对比

在 JavaScript 中,有多种方法可以用来连接数组,以下是常见的几种:1. concat() 方法用于连接两个或多个数组,返回一个新的数组,不修改原数组。const arr1 = [1, 2, 3];const arr2 = [4, 5, 6];const result = arr..

.NET开源ORM FreeSql常见问题和解决方法

FreeSql 是一个功能强大的 .NET 开源 ORM(对象关系映射)工具,支持多种数据库类型并提供丰富的功能特性。以下是使用 FreeSql 过程中常见的问题及其解决方法:1. 数据库连接问题问题描述:无法连接数据库,报错提示..

js 数组方法 - 修改篇

js数组方法可分为三类:修改、访问、迭代。修改:改变原有数组访问:不改变原有数组,从原有数组中获取数据迭代:对数组的每一项进行处理,返回数据本文主要介绍数组的修改篇一、增加1、push()含义:在数组末尾添加..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

Blazor 与传统 ASP.NET MVC 的对比

Blazor 和传统 ASP.NET MVC 是两种不同的Web开发框架,分别针对现代前端开发需求和传统的服务端渲染需求。以下从多个维度对两者进行对比:1. 架构和工作方式Blazor基于组件的开发方式,采用现代化前端框架的思想,代..

SQLite性能支持多少数据量?

SQLite是一种轻量级的关系型数据库管理系统,广泛应用于移动应用、嵌入式系统和小型桌面应用程序中。由于其零配置、自给自足的特性,SQLite在很多场景下非常受欢迎。然而,对于许多开发者来说,一个常见的问题是:SQ..

Sylvan.Data.Excel 性能优异的开源.NET Excel数据读取库

Sylvan.Data.Excel是一个开源、免费、跨平台的.NET库,专注于读取和写入Excel数据文件。支持多种文件格式,并提供高效的数据访问和数据绑定功能。该库在.NET生态系统中是读取Excel数据文件的最快且内存分配最低的库..

sourcetree安装跳过注册方法

SourceTree下载提取码: ni9m 需翻墙或者破解注册当前只有Win的版本,Mac自行百度很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者..

SQL Server用UUID做主键性能问题和解决方案

在 SQL Server 中使用 UUID(全称:Universally Unique Identifier) 作为主键确实可能带来一些性能问题,特别是在大型数据库和高写入负载的场景下。以下是一些关键的性能挑战及其原因:1. 无序插入导致索引碎片化UU..

.NET开发中常见的异常报错原因和解决方法?

在 .NET 开发中,常见的报错通常涉及代码编写、配置和运行时环境。以下是一些常见的报错类型及其解决建议:1. NullReferenceException原因:尝试访问空对象的成员。解决:在访问对象之前检查是否为 null,可以使用 C..

发表回复

返回顶部