C#的list的常用的方法,List的粗略记录,将一个list的元素给另外一个list的元素赋值

C#实现A*寻路算法:从原理到Unity游戏集成实战 在游戏开发和人工智能领域,路径规划是核心基础技术之一,它决定了角色如何在复杂环境中智能移动。其基本原理是通过图搜索算法,在节点网络中寻找从起点到终点的最优路径,技术价值在于平衡搜索效率与路径质量。A*算法作为经典启发式搜索算法,通过引入预估成本(启发函数)显著提升搜索效率,广泛应用于游戏NPC移动、机器人导航、战略游戏单位调度等场景。本文聚焦于A*算法在游戏开发中的工程实践,详细拆解其核心三要素(G、H、F值)与运行流程,并提供完整的C#实现方案,重点解决游戏开发中常见的NPC智能移动与障碍物规避问题,通过 阅读详情
AI摘要

本文档介绍了C#中List<T>的基本使用,包括声明、添加、插入、相加、删除、清空、查找及遍历等操作。通过实例展示了如何创建和操作List<Student>,并探讨了浅复制的概念。文章还提供了多个常用方法的链接,如Add、Insert、Remove、Clear、FirstOrDefault、Find、FindAll、Contains和ForEach。

List的极其简单的学习记录

在写东西的时候如果数据很多,就会使用list来存储数据,需要使用的时候就需要将数据取出来然后进行操作。接下来就介绍一些list的简单操作以及一些常用或者不常用的方法。
LIst的微软文档

list的声明

List<string> str_list=new List<stirng>();

上面声明了一个string类型的list,这个list中只能存储string类型的数据。
string类型为值类型。(值类型的微软C#文档)。

如果创建一个引用类型的list呢?
那就要知道什么是引用类型,然后才能创建出引用类型的list(引用类型)。然后我们创建出一个引用类型的list

static void Main()
{
		List<Student> student_List=new List<Student>();
}


 class Student
 {
		public string Name;
		public string Sex;
 }

一些简单的方法

介绍一些我常用的方法,防止以后抽抽还知道怎么使用。
多创建几个对象让后放到list中去,后面就可以使用了。

    class Program
    {
        static void Main(string[] args)
        {
            //第一组list
            List<Student> student_List = new List<Student>();
            Student stu1 = new Student() { Name = "学生一", Sex = "Nan" };
            Student stu2 = new Student() { Name = "学生二", Sex = "Nv" };
            Student stu3 = new Student() { Name = "学生三", Sex = "Nan" };
            Student stu4 = new Student() { Name = "学生四", Sex = "NV" };
            Student stu5 = new Student() { Name = "学生五", Sex = "Nan" };
            student_List.Add(stu1);
            student_List.Add(stu2);
            student_List.Add(stu3);
            student_List.Add(stu4);
            student_List.Add(stu5);

            //第二组list
            Student stu_10 = new Student() { Name = "学生四", Sex = "NV" };
            Student stu_11 = new Student() { Name = "学生五", Sex = "Nan" };
            List<Student> student_List_2 = new List<Student>();
            student_List_2.Add(stu_10);
            student_List_2.Add(stu_11);

        }
    }

    class Student
    {
        public string Name;
        public string Sex;
    }

添加Add

使用上面的代码创建的list,Add的微软文档。

Student stdd=new Student(){Name="goodCooking",Sex="Nan"};//创建对应的对象,将对象添加到对象类型的list中去
student_List.Add(stdd);

插入某一个元素 Insert

将元素插入 List 的指定索引处。
文档链接

Student stdd=new Student(){Name="goodCooking",Sex="Nan"};
student_List.Insert(2);//在将stdd插入到索引2

两list相加 AddRange

文档链接

            student_List.AddRange(student_List_2);

            //再测试一下是深复制还是浅复制
            //修改student_List_2中的值对相加之后student_List是否有影响
            student_List_2[0].Name = "我被修改了啊";
            Console.WriteLine(student_List[5].Name);
            Console.ReadLine();

            //输出:我被修改了啊 

            //所以是浅复制,

删除 Remove

文档链接

            student_List.Remove(student_List[0]);//移除第一个

清空 Clear

文档链接

            student_List.Clear();
			//list会被清空,因为是引用类型,在使用AddRange之后还是可以访问student_List_2的。

查找某一元素 FitstOfDefult

文档链接

            var b = student_List.FirstOrDefault(p => p.Name == "学生一");//使用了拉姆达表达式
            Console.WriteLine(b.Name);
            Console.Read();

查找某一元素 Find

文档链接,使用方式和 FitstOfDefult 差不多。

            var b = student_List.Find(p=> p.Name== "学生一");
            Console.WriteLine(b.Name);
            Console.Read();

查找某一群体元素 Where

文档链接,使用Where获得的新的list对于原本的list的数据为引用类型,所以修改where返回的list也会同时修改原本的list的数据

            //查找所有性别的为NV的然后修改为女
            //这个是区分大小写的
            var c = student_List.Where(p=>p.Sex=="NV");
            foreach (var item in c)
            {
                item.Sex = "女";
            }
            foreach (var item in student_List)
            {
                Console.WriteLine(item.Sex);
            }

            Console.Read();
		输出结果:
		Nan
		Nv
		Nan
		女
		Nan

查找某一组元素 FindAll

文档链接

       var d=     student_List.FindAll(p=>p.Sex=="NV");//获取新的list 和where一样

确认某一元素是否存在 Contains

文档链接,再次添加一个元素,没啥用,就是想加一个

            Student stu6 = new Student() { Name = "学生六", Sex = "NV" };
            student_List.Add(stu6);
            var e = student_List.Contains(student_List.Find(p => p.Name == "学生六"));//存在
            var f = student_List.Contains(student_List.Find(p => p.Name == "GoodCooing"));
            Console.WriteLine(e);
            Console.WriteLine(f);
输出结果为: 
True
False  

遍历每一个元素 ForEach

文档链接,会对每一个元素做相同的操作。

		//带有条件的 ForEach 
		        student_List.ForEach(p =>
            {
                if (p.Sex == "NV")
                {
                    p.Sex = "女";
                }
            });
				输出结果:
				Nan
				Nv
				Nan	
				女
				Nan
				女

			//不带有条件的ForEach 
            student_List.ForEach(p => p.Sex = "男");

            foreach (var item in student_List)
            {
                Console.WriteLine(item.Sex);
            }


输出结果:
男
男
男
男
男
男


排序 Sort

可以根据指定的比较器对列表中的元素进行排序。


student_List.Sort((x, y) => string.Compare(x.Name, y.Name));

反转 Reverse

可以将列表中的元素顺序反转。

student_List.Reverse();

获取范围 GetRange

可以获取列表中指定范围的元素。

List<Student> subList = student_List.GetRange(1, 3); // 获取从索引1开始的3个元素

转换为数组 ToArray

可以将列表转换为数组。

Student[] studentArray = student_List.ToArray();

有空再次补充吧。

青轴真难用,太硬了,

Enjoy

不懂评论私信,共同进步。

C#实现A星寻路算法:从原理到Unity游戏开发实战 寻路算法是游戏开发与人工智能领域的核心技术,用于解决智能体在复杂环境中寻找最优路径的问题。其核心原理是通过评估节点代价来引导搜索方向,在效率与结果最优性之间取得平衡。A星(A*)算法作为其中的“黄金标准”,结合了Dijkstra算法的最短路径保证与启发式搜索的高效性,通过计算G值(实际代价)、H值(启发式估计)和F值(综合优先级)来动态决策。该技术的工程价值在于能够为游戏角色、机器人导航等场景提供实时、可靠的路径规划能力。在游戏开发中,A星算法广泛应用于角色移动、NPC行为决策等场景。本文将以C#和Unit 阅读详情

相关推荐

基于Clipper2库实现C#游戏开发中的高精度多边形碰撞检测

碰撞检测是游戏物理交互与逻辑实现的核心基础,它通过判断游戏世界中几何对象的空间关系来驱动角色移动、攻击判定等关键行为。其原理在于计算物体边界形状是否发生重叠或接触。在2D游戏开发中,传统的分离轴定理(SAT)等方法在处理凸多边形时高效,但面对不规则凹多边形或带孔洞的复杂形状时,实现变得繁琐且易出错。利用Clipper2这类成熟的几何计算库进行布尔运算,提供了一种高精度且统一的解决方案,它将碰撞检测转化为计算两个多边形的交集是否非空,从而原生支持各种复杂形状。这一技术方案在2D平台游戏、策略模拟及物理沙盒等场

weixin_34151004的博客 357

C# List使用详解

在 C# 中,List 和数组都是用于存储一组元素的数据结构,但它们之间有一些关键的区别和各自的优缺点。

sunyao1314的博客 1万+

C#实现滚球算法:从点云提取凹包边界的技术详解与应用

在计算几何与空间数据处理领域,从离散点集提取边界轮廓是一个基础且关键的问题。凸包算法虽能快速生成外轮廓,但无法捕捉地物真实的凹陷特征,限制了其在复杂场景的应用。滚球算法(α-Shape)通过引入一个可调节半径的虚拟圆盘在点集上“滚动”,其核心原理是:若存在一个半径为R的圆盘能经过某两点且内部不含其他点,则这两点间的线段构成边界。这一机制赋予了算法强大的灵活性,通过调整半径参数,可在凸包与精细凹包间平滑过渡,从而精确刻画湖泊、森林、建筑物等不规则实体的真实轮廓。其技术价值在于将严密的几何判定转化为可高效计算的

weixin_34025051的博客 462

C# List用法 List介绍

一、List泛型集合   集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。     为什么要用泛型集合?     在C# 2.0之前,主要可以通过两种方式实现集合:     a.使用ArrayList     直接将对象放入ArrayList,操作直观,但由于集合中的项是Object类型,因此每次使用都必须进行繁琐的类型转换。     b.使用自定义集合类     比较常见的做法是从CollectionBase抽象类继承一个自定义类,通过对IList对象进行封装实现强

深海地平线的博客 9759

C# C++ 笔记

变量自定义赋值​# 变量取值用$()​​​​​​clean:多个程序员分发同一程序时,由于不能直接在一个程序上进行功能的开发,所以就有了功能分支的概念。二维数组可以理解为是存储指针的一维数组,里面的每一个指针都指向一个一维数组的首地址存储多个一维数组的数据结构。array 是一个二维数组,它有3行和4列,总共可以存储12个整数。

AVICCI的博客 2202

C# WinForms + YoloV8:实现PCB二维码实时检测与识别

在工业视觉领域,二维码识别是生产追溯的关键环节,但PCB板面复杂纹理、反光和频繁换型让传统方案难以稳定工作。目标检测模型与解码库结合的两段式架构,成为解决这类问题的通用范式:先通过YoloV8定位二维码区域,再交由ZXing精准读取内容。本文从工程实践角度出发,介绍如何基于C# WinForms搭建完整的视觉检测系统,涵盖工业相机SDK封装、ONNX Runtime模型部署、图像预处理与后处理、多线程调度等核心环节。这种架构不仅适用于PCB二维码识别,也可迁移至缺陷检测、字符喷码识别等场景,为开发者提供可复

weixin_33910137的博客 358

C# 自定义List

自定义 List 如下,我将常用的功能封装了一下{{set{{throw new ArgumentOutOfRangeException("容量太小");}{{{}}else{}}}}{get{{throw new ArgumentOutOfRangeException("index不能大于等于数组的长度");}}set{{

熊思雨的博客 1万+

大模型训练流程(四):PPO强化学习实战与调优指南

本文详细解析了大模型训练中PPO强化学习的实战应用与调优技巧,涵盖RLHF核心原理、PPO算法实现及显存优化策略。通过具体案例和代码示例,指导开发者有效提升模型回答质量与安全性,避免常见训练陷阱。

weixin_29051811的博客 438

C#数据结构(List)

注:自我练习,熟悉C#基础数据结构。一、提供的属性和接口。

防止名字重复 1966

No Target Connected 错误时的一种情况

STM32的SWD烧录模式No Target Connected 错误的一种情况 STM32的SWD烧录模式No Target Connected 错误时的一种处理情况 这是我第一次烧板子的时候遇到的问题,在给板子download的时候出现了“No Target Connected”的错误,这里讲一种解决方法。不一定适用于全部状况,但是可以作为一种纠错方法。 打开 Options for Target… 1.首先点击Options for Target…这个像魔棒一样的按键打开,会出现这个页面 2.点击

Logan_CodeGou的博客 1万+

AI对嵌入式的冲击分三波,大多数人只看到了第一波

摘要:AI对嵌入式行业的冲击将分三波递进:第一波(已发生)是代码生成,AI能完成底层驱动配置;第二波(1-2年内)是架构设计,AI将参与系统方案制定;第三波(2-3年)是需求验证,AI能穷举测试用例但无法替代安全决策。每波冲击都将重新定义工程师的价值标准,经验型工程师若不能将隐性知识转化为显性规则将面临淘汰。作者指出,完全不用AI的人第一波就会被淘汰,而仅满足于第一波应用的人将在后续冲击中落后。

u010898524的博客 962

萌新游戏开发记录——引擎选择和C#例程阅读(一)

玩了很多年游戏,心血来潮,想学游戏开发,打算做出符合自己XP的游戏,全部人物和玩法全是要在我的xp上,绝不妥协。我之前写单片机裸机代码,略懂C语言,跑了很多项目吧,有一定的工程经验(单片机),这些经验应该对游戏开发有用吧(?),现在从零开始打算学习下游戏开发,做出自己想要的游戏。写文章主要记录下自己在游戏开发的学习和实践吧,回头看看自己的心路例程反省下,也请大家看看有哪些不妥之处并指出。private:只能内部用 = C 的只在本文件可见Vector2:一个C 里的存 x/y 的结构体。

apoisn3的博客 606

PCIe Electrical PHY(4)-PCIE SPEC第8章指标讲解

1.1 PCIE TX SPEC TX主要关心两类参数,一类是Voltage Parameters,一类是Jitter Parameters。 其中Voltage相关参数主要关心不同preset下差分电压幅度的准确性。以及共模电压的稳定性。 PCIE spec中对Jitter相关的参数测量定义如下: 分为两大类:DDJ(Data dependent Jitter)和UJ(Uncorrelated ...

maxwell2ic的博客 5953

C#方法重载深度解析:从编译原理到API设计实践

方法重载是面向对象编程中的基础概念,它允许在同一作用域内定义多个同名方法,通过参数列表的类型、顺序或数量进行区分。其核心原理在于编译时的重载决策机制,编译器会根据实参类型与形参的兼容性,遵循完全匹配优于隐式转换等规则,选择最合适的方法版本。这一特性在提升API灵活性与表达力的同时,也要求开发者注重设计意图的清晰性,避免因参数歧义导致的可读性问题。在实际的工程实践中,重载常与构造函数链、静态工厂方法及运算符重载等技术结合,用于构建如日志记录器、数值计算等组件的友好接口。通过理解重载决策的底层逻辑与常见陷阱,开

weixin_30580341的博客 363

SCADA|RESTful学习,Apipost通过GET获取KingSCADA实时数据

本文介绍了如何使用RESTful实现SCADA与MES系统对接。主要包括:1)对比RESTful与其他协议的性能指标;2)KingSCADA作为Server/Client的三种应用场景;3)详细演示KingSCADA3.8作为Server端的配置过程,包括端口设置和API测试。通过Apipost工具测试获取变量值及数据回写接口,其中数据回写需使用MD5加密密码。文章最后指出回写测试失败的情况,但未分析具体原因。全文以实际工程应用为导向,提供了具体操作步骤和技术细节。

做有价值的事,积累有价值的笔记! 626

8155源码编译DSP(ubuntu环境下)

一.设置环境变量 -users:/$ sudo gedit ~/.bashrc #set adsp cdsp tools path #export ARMLMD_LICENSE_FILE=<LICENSE FILE INFO> #export ARMTOOLS=RVCT221 #export ARMROOT=/pkg/asw/compilers/arm/ADS1.2 #export ARM_COMPILER_PATH=/pkg/qct/software/arm/RVDS/2.2BLD593

Johnny2004的专栏 1679

C# 类型选型:enum、struct、class 的底层差异与实战指南

在C#开发中,值类型与引用类型的选择直接决定内存布局、数据传递行为与GC压力。enum、struct属于值类型,class属于引用类型:struct赋值时复制整个数据,class赋值时复制引用,而enum本质上是带名字的整型值类型。这些底层机制带来不同的技术价值——合理使用struct可以避免堆分配、提升缓存友好性,降低GC压力,但体积过大时复制开销反而超过引用;不当的装箱操作也会让性能损失。实际场景中,固定状态集合用enum,轻量数学量如坐标、尺寸用struct,有生命周期的业务实体则用class。只有理

weixin_34277853的博客 400

在zcu102开发板上使用PetaLinux运行Qt程序

请注意,上述步骤只是一个概述,并且可能需要根据特定的开发环境和要求进行适当的调整。如果你是一个初学者或者对于这些领域不太熟悉,建议在尝试之前阅读相关的文档和教程,或者寻求专业人士的帮助。在"Projects"菜单中,选择"Build & Run"选项,并在"Build"步骤中选择正确的工具链。注意:如果Qt程序依赖于其他库文件,需要将这些库文件一起复制到PetaLinux工程的根文件系统目录中,并在Qt程序中正确地配置库文件路径。如果一切顺利,PetaLinux系统将启动,并自动运行Qt程序。

UhxzCombined的博客 698

A*算法详解:从核心原理到C#代码实现智能寻路

路径规划是计算机科学中的基础问题,旨在寻找两点间的最优路径。其核心原理在于权衡已知代价与启发式预估,以高效探索解空间。A*算法作为启发式搜索的经典代表,通过F=G+H公式巧妙结合实际代价与启发函数,在保证最优性的同时大幅提升搜索效率。这一技术价值在于为游戏开发、机器人导航、地图应用等场景提供了高效可靠的寻路解决方案。本文以C#代码为例,深入解析A*算法的实现细节,涵盖开放列表、关闭列表管理及启发函数选择等关键环节,并探讨其在Unity引擎中的实战应用与性能优化策略。

397

【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

同学小张的博客 3749

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#队列全解析:从Queue<T>基础到ConcurrentQueue<T>高并发实战

队列作为一种基础数据结构,遵循先进先出原则,是管理有序数据流的理想模型。其核心原理在于高效的元素存取机制,在单线程环境下能提供极致的性能。随着软件系统复杂度提升,多线程与高并发成为常态,线程安全问题随之凸显。传统队列在并发访问时会导致数据竞争与状态不一致,这催生了线程安全队列的技术演进。通过无锁算法与CAS操作,线程安全队列能在高并发场景下保证数据一致性,极大提升了后台任务处理、消息传递等系统的可靠性与吞吐量。本文聚焦于C#中的Queue<T>与ConcurrentQueue<T>,深入探讨其内部实现、性能

weixin_33794672的博客 412

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++与C#深度对比:从底层原理到实战选型全解析

编程语言选型是软件开发中最核心的决策之一,尤其在性能与开发效率需要兼顾的场景下,C++和C#常被放在天平两端。C++以零开销抽象和手动内存管理赋予开发者极致的底层控制力,适合游戏引擎、高频交易和嵌入式系统;C#则依托垃圾回收和丰富的类库,在Windows桌面、上位机和企业级应用中大幅提升生产力。理解两者的底层机制与适用边界,能帮助工程师在不同业务约束下做出正确判断。本文通过核心特性拆解、实际代码对比和项目复盘,结合内存布局、线程模型、泛型实现等关键技术细节,系统分析两门语言在性能敏感型任务和快速迭代型项目中

weixin_33849215的博客 118

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

手写C# B树实现:从IO原理到页分裂的工程实践

B树是数据库索引与磁盘存储的核心数据结构,其设计本质是为缓解CPU与磁盘之间的巨大性能鸿沟——一次磁盘IO耗时相当于8万次内存运算。理解B树,关键在于掌握‘最小填充率’‘叶子同高’‘键指针守恒’等底层约束,而非仅记忆O(log n)时间复杂度。它通过提升节点度(T值)减少树高,从而压缩IO次数,直接决定查询延迟与索引效率。在.NET生态中,缺乏可调试、可教学的B树参考实现,导致开发者难以深入索引优化、填充因子调优、页分裂机制等真实场景。本文以纯C#手写可运行B树为载体,聚焦IO感知设计、分裂边界处理与迭代插

dianlu5775的博客 552

Unity C# Job System核心原理与实战:多线程性能优化指南

多线程编程是现代软件开发中提升性能的关键技术,它允许程序同时执行多个任务,充分利用多核CPU的计算能力。其核心原理是通过创建多个执行线程,将计算密集型任务分配到不同核心并行处理,从而突破单线程的性能瓶颈。这项技术的核心价值在于显著提升程序的运行效率和响应速度,尤其在游戏开发、科学计算和实时数据处理等场景中效果显著。在Unity引擎中,C# Job System正是这一理念的杰出实践,它通过安全的数据容器NativeContainer和高效的Burst编译器,为开发者提供了一套线程安全的并行计算框架,让大规模

weixin_34192816的博客 322

AI生成代码安全风险剖析与C#恶意代码检测沙箱实战

生成式AI(AIGC)通过理解自然语言指令自动生成代码,显著提升了开发效率,其核心原理是基于大规模代码语料训练的语言模型进行模式匹配与补全。这项技术在赋能快速原型构建和代码补全的同时,也带来了全新的安全挑战。攻击者可利用AI模型的代码生成能力,通过精心设计的提示词(Prompt)动态构造恶意代码,大幅降低了攻击的技术门槛,形成了新型的供应链安全威胁。具体到应用场景,在C#/.NET生态中,攻击者可能利用AI生成用于信息窃取、权限提升或持久化驻留的恶意模块。因此,对AI生成代码(AI-Generated Co

weixin_30564785的博客 447
上一篇: Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定
下一篇: Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案
先生沉默先
博客等级 码龄6年 920粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值