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.youkuaiyun.com/qq_18995513/article/details/53289505
.
.
.
.
.
.
.
C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for?
PS:根据我的经验,还有另外一种方法也不错,再定义一个新的list列表B,你循环总的list列表A时,将你要保留的那些数据,直接添加到 列表B里面,这样更方便快捷。完全不用担心报错问题。
如果是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的学生。
对本文感兴趣的童鞋们,欢迎点击下方收藏,如果喜欢我写的文章,记得给我点个赞鼓励一下,哈哈哈。本文将一直公开给大家使用,本文后期会不定时更新 新内容。
转载的童鞋记得注明出处↓ ↓ ↓ ↓ ↓ ↓
C#–List–删除List集合中指定几条个数据(removeAll方法)
https://blog.youkuaiyun.com/VIP_CR/article/details/103953875