C#--List--删除List集合中指定几条个数据(removeAll方法)

1.删除List集合中指定几条个数据(removeAll方法)

static List<Object> deletelist = new List<Object>() { 1, 2, 4, "你好", "今天" };
static List<Object> list = new List<Object>() { 1, 2, 3, "你好", "昨天",88 };
static void Main(string[] args)
{
    list.RemoveAll(it => deletelist.Contains(it));
    foreach (Object i in list)
    {
        Console.WriteLine(i);
    }
    Console.ReadKey();
}

在这里插入图片描述

2.根据用户名称列表,删除List总用户列表中指定几个用户(Remove方法、FirstOrDefault方法)

新建控制台应用程序,代码如下

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //总用户列表
            List<userinfo> list = new List<userinfo>();
            userinfo ceshi1 = new userinfo();
            ceshi1.id = "1";
            ceshi1.UserName = "测试1";
            ceshi1.Age = "11";
            list.Add(ceshi1);
            userinfo ceshi2 = new userinfo();
            ceshi2.id = "2";
            ceshi2.UserName = "测试2";
            ceshi2.Age = "12";
            list.Add(ceshi2);
            userinfo ceshi3 = new userinfo();
            ceshi3.id = "3";
            ceshi3.UserName = "测试3";
            ceshi3.Age = "13";
            list.Add(ceshi3);
            userinfo ceshi4 = new userinfo();
            ceshi4.id = "4";
            ceshi4.UserName = "测试4";
            ceshi4.Age = "14";
            list.Add(ceshi4);
            //要删除的用户列表
            List<string> deletelist = new List<string>() {"测试1","测试3"};
            if (list.Count > 0)
            {
                //循环要删除的用户列表
                foreach (var item in deletelist)
                {
                    userinfo PLCY = new userinfo();
                    //根据用户名,在总用户列表中查找用户实体
                    PLCY = list.FirstOrDefault(t => t.UserName == item);
                    //删除总用户列表
                    list.Remove(PLCY);
                }
            }

            //然后循环显示总用户列表
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    Console.WriteLine(item.UserName);
                }
            }
            Console.ReadKey();
        }
    }
    public partial class userinfo
    {
        /// <summary>`在这里插入代码片`
        ///  用户管理
        /// <summary>
        public string id { get; set; }

        /// <summary>
        ///  
        /// <summary>
        public string UserName { get; set; }

        /// <summary>
        ///  
        /// <summary>
        public string Age { get; set; }

    }
}

在这里插入图片描述

------------------------------以下为转载内容--------------------------------------------

存在的问题:C#中如果想要删除一个集合中的所有元素,直接for循环边读边删除是不可行的。因为每删除一个元素,后面的元素就会往前排,即它们的索引会向前-1,然后i还是正常的自增,就会跳过下一个元素。

// 错误的写法
for (int i = 0 ; i < list.Count ; i++ ){
    list.RemoveAt[i];
}

在这里插入图片描述
原文:https://blog.csdn.net/qq_18995513/article/details/53289505

.
.
.
.

.
.
.

C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for?

如果是foreach,那么恭喜你,你答错了。如果你想到的是用for,那么你只是离成功进了一步。

正确的做法是用for倒序遍历,根据条件删除。下面我们用代码来演示foreach,for删除list数据的情况:
复制代码

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的学生。

发布了36 篇原创文章 · 获赞 10 · 访问量 2851

猜你喜欢

转载自blog.csdn.net/VIP_CR/article/details/103953875