C#泛型List删除多个元素的方法

2023-10-30

泛型List如果删除一个,很简单,直接 RemoveAt(index)即可。

但如果有多个元素,那么删除起来并不是特别简单。需要使用 for 循环的倒叙删除

 

例子如下:

class Program
    {
        public class Students
        {
            public string Name { get; set; }
            public int Age { get; set; }

            public Students(string name, int age)
            {
                this.Name = name;
                this.Age = age;
            }
        }

        static void Main(string[] args)
        {
            List<Students> stuList = new List<Students>();
            stuList.Add(new Students("Tom",20));
            stuList.Add(new Students("Tang", 20));
            stuList.Add(new Students("Tang", 22));
            stuList.Add(new Students("Trista", 24));
            stuList.Add(new Students("Lili", 25));

            //打印姓名
            Console.Write("删除前:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");


            Console.ReadKey();
        }
    }

打印结果:Tom  Tang  Tang  Trista  Lili

 

1.先用foreach遍历删除姓名为Tang的学生,代码如下:

foreach (var stu in stuList)
{
       if (stu.Name == "Tang")
            stuList.Remove(stu);
}

会报如下错误:

因为在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从需导致在foreach中删除元素会出现异常。

 

2.用for正序遍历删除,代码如下:

//打印姓名
            Console.Write("删除前:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");


            //删除姓名为Tang的学生
            for (int i=0;i< stuList.Count;i++)
            {
                if (stuList[i].Name == "Tang")
                    stuList.Remove(stuList[i]);
            }

            //打印姓名
            Console.Write("\n删除后:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");

结果:

 只删除了一个姓名为Tang的学生。为什么会出现这种情况呢?

这是因为当i=1时,满足条件执行删除操作,会移除第一个Tang,接着第二个Tang会前移到第一个Tang的位置,即游标1对应的是第二个Tang。

接着遍历i=2,也就跳过第二个Tang。

 

3.用for倒序遍历删除,代码如下:

for (int i = stuList.Count-1; i>=0; i--)
            {
                if (stuList[i].Name == "Tang")
                    stuList.Remove(stuList[i]);
            }

结果:

这时删除了全部姓名为Tang的学生。

 

转自https://www.cnblogs.com/qk2014/p/4764073.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#泛型List删除多个元素的方法 的相关文章

随机推荐

  • C++QT获取其他exe的输入edit控件id并且设置edit内容

    C QT获取其他exe的edit控件id并且设置edit内容 找到exe的窗口句柄 1 知道exe的窗口类名已或者标题名字 2 不知道窗口名字类等等 只知道exe的启动名字 qt如何使用 找到exe的窗口句柄 找到窗口的句柄有很多种方法 可
  • 【Slack+Claude保姆级安装教程】

    AI破局先行者 AI工具 AI绘图 AI专栏 如果你想学到最前沿 最火爆的技术 赶快加入吧 作者简介 硕风和炜 CSDN Java领域优质创作者 保研 国家奖学金 JAVA开发技术栈 面试刷题 面经八股文 经验分享 好用的网站工具分享 恭喜
  • Hive CliDriver hack

    关于 CliDriver 参考 Hive源码分析 CLI入口类 这个入口天生是为 Hive 的 shell 提供的 当我在自己的应用里想提交一个 Hive 任务时 却发现不能直接使用 之前 MR 的 RunJar 就可以 正如上面的 Hiv
  • 3D数学——Unity中的向量运算

    零向量 零向量是非常特殊的一个向量 它是唯一一个大小为0的向量 也是唯一一个没有方向的向量 2D零向量表示为 0 0 3D零向量表示为 0 0 0 在Unity中 用Vector3 zero来表示3D零向量 负向量 每个向量都有一个负向量
  • SeaArt.ai: 海艺AI绘画艺术图片模型创作平台

    产品介绍 名称 SeaArt ai 具体描述 SeaArt ai是一个基于人工智能技术的AI绘画工具 它可以根据你的描述或者关键词来生成符合你想象的图片 你可以选择不同的模式来创建不同类型的图片 比如人物 风景 建筑 神话 自然 科技等 你
  • LLVM IR 语法简介(一)

    LLVM IR 被设计为一种轻量级 底层的语言用来描述各种上层的语言 对于不同的语言 都可以归纳为同一种IR的格式 标示符 LLVM的标识符分为全局标识符和局部标识符 全局标识符以 开头 局部标识符以 为开头 1 命名过的数值会被标识为一个
  • 今天开始写自己的博客

    从工作以来 我总是看别人的博客和文章 真心的想对这些人说一声谢谢 我们都是站在巨人的肩膀上 而你们就是伟大的巨人 一篇篇文章 从基础到高深的知识 也让我一步一步的成长了起来 如果没有人把他们的学习经历和遇到的问题写出来 我想我的成长的速度也
  • sqli-labs-master第八关

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 Less 8 分析下源码中的函数 总结 前言 本篇会介绍到一些php函数和SQL语句 一 Less 8 id 1 尝试加入单引号或双引号 id 1 ic
  • 后端返回图片类型转换,buffr

    img alt style width 83 let bytes new Uint8Array res photo data let data let len bytes byteLength for let i 0 i lt len i
  • 【C++】4、Preprocessor 预处理:条件编译、源文件包含、宏替换、重定义行号、错误信息、编译器预留指令

    文章目录 一 概述 二 格式 2 1 条件编译 2 2 源文件包含 2 3 宏替换 2 3 1 语法 2 3 2 C 标准内置的预定义宏 2 4 重定义行号和文件名 2 5 错误信息 2 6 编译器预留指令 三 应用场景 C 的 Build
  • Vulkan教程翻译之九 Descriptor Set Layouts 和 Pipeline Layouts

    原文链接 https vulkan lunarg com doc sdk 1 2 131 2 windows tutorial html 08 init pipeline layout html Descriptor Set Layouts
  • element中对el-input 自定义验证规则

    element中对el input 自定义验证规则 首先明确要使自定义校验生效的话 必须 prop 和 rules 的 键对应 如示例 prop description 在 rules 中有对应的键
  • git连接不到远程ssh,解决Unable to negotiate with **** port 22: no matching host key type found. Their offer:

    使用git链接远程push时ssh方式出错 连接失败 解决方法如下 参考文章 记一次使用git报错 解决Unable to negotiate with port 22 no matching host key type found The
  • 【python 6】Numpy

    文章目录 一 创建ndarry 1 使用 np array 由 python list 创建 2 使用np的常规函数创建 二 ndarry 的属性 三 ndarry 的基本操作 四 ndarry 的矩阵操作 Numpy 是python的数值
  • 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0

    我电脑的VS版本 1 问题1 找不到 Windows SDK 版本10 0 17134 0 请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择 重定解决方案目标 来更改 SDK 版本 2 出现问题的过
  • 数据结构之---C语言实现拓扑排序AOV图

    有向图的拓扑排序 杨鑫 include
  • React TypeScript

    1 安装 就像安装其他插件库一样 在项目文件夹下执行 npm install antd save 如果你安装了 yarn 也可以执行 yarn add antd 2 引用 import Button Tooltip from antd im
  • window下C语言中strtok函数的使用

    基础知识 原型 char strtok char str const char delim 功能 分解字符串为一组字符串 参数说明 str为要分解的字符串 delim为分隔符字符串 其中 str 不能用指针来存储 因为这个方法的本质是 找到
  • IOS 使用自定义View实现圆形布局(Swift)

    前面写过用安卓实现 还是同个需求 只不过现在需要做苹果版本 网上搜到了类似的案列点击打开链接只不过他的是用UICollectionView 跟我的需求有点不符合 没有搜到完全符合的案例 没办法自己写个 记录一下 也给有同种需求的童鞋填个坑
  • C#泛型List删除多个元素的方法

    泛型List如果删除一个 很简单 直接 RemoveAt index 即可 但如果有多个元素 那么删除起来并不是特别简单 需要使用 for 循环的倒叙删除 例子如下 class Program public class Students p