如果某个元素包含特定文本,则从列表中删除该元素
本文关键字:元素 列表 删除 文本 包含特 如果 | 更新日期: 2023-09-27 18:02:47
我有一个C#方法,在该方法中,我在具有username + datetime
格式元素的列表中查找某些文本,例如username
,如果文本的任何部分与列表中的元素匹配,则必须从列表中删除整个元素
添加到c# List
的方法
string active_user = model.UserName.ToString();
string datetime = "(" + DateTime.Now + ")";
List<string> activeUsers = new List<string>();
if (activeUsers.Any(str => str.Contains(active_user)))
{
//do nothing
}
else
{
activeUsers.Add(active_user+datetime);
}
现在我想要一个方法,如果元素匹配用户名或元素的任何部分,比如,则删除该元素
if (activeUsers.Contains(active_user))
{
activeUsers.Remove(active_user);
}
虽然其他答案是正确的,但您应该注意,它们会删除任何匹配项。例如,active_user = "John"
将删除"John"、"John123"、"OtherJohn"等。
您可以使用正则表达式进行测试,或者如果用户名没有括号,请这样进行测试:
string comp = active_user + "("; // The ( is the start of the date part
activeUsers.RemoveAll(u => u.StartsWith(comp));
另外请注意,这是区分大小写的。
您可以执行类似的操作
activeUsers.RemoveAll(u => u.Contains(active_user));
这将匹配并删除activeUser
中包含active_user
中文本的所有元素。
var user = activeUsers.FirstOrDefault(au => au.Contains(active_user);
if(user != null)
activeUsers.Remove(user);
如果你只想删除第一个匹配,否则:
var users = activeUsers.Where(au => au.Contains(active_user);
foreach(var user in users)
activeUsers.Remove(user);
或者更简单地说,是用RemoveAll方法Eric回答的。
如果我想从我的列表中删除数字字符串值列表项
List<ModelName> ModelList = new List<ModelName>();
var regex = new Regex(@"'d");
foreach(var item in ModelList.ToList())
{
if (regex.IsMatch(item.PropertyName))
{
ModelList.RemoveAll(t => t.PropertyName== item.PropertyName);//Or
ModelList.RemoveAll(t => t.PropertyName.Contains(item.PropertyName));//Or You Can Use Contains Method
}
}
return ModelList;
这将从列表中删除所有将数值作为字符串的项目,并仅返回列表项目中的字符串