如果列表中包含特定文本,则从列表中删除元素

7

我有一个C#方法,在其中查找某些文本,比如说用户名,在格式为用户名 + 日期时间的列表中查找元素,如果任何部分的文本与列表中的元素匹配,则必须从列表中删除整个元素。

添加到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);
}
4个回答

11

虽然其他答案都是正确的,但您应该注意它们会删除任何匹配项。例如,active_user = "John"将删除"John"、"John123"、"OtherJohn"等。

您可以使用正则表达式进行测试,或者如果用户名没有括号,可以像这样进行测试:

string comp = active_user + "(";     // The ( is the start of the date part
activeUsers.RemoveAll(u => u.StartsWith(comp));

注意,这是区分大小写的。


似乎对我的使用非常完美。 - DoIt
如果我想检查更多的条件怎么办? - Si8
@Si8 只需使用 &&。activeUsers.RemoveAll(u => u.StartsWith(comp) && somethingelse && somethingelse2); - 001
谢谢。如果您想要帮忙的话,我在这里发布了我的问题... http://stackoverflow.com/questions/41487624/how-to-remove-entry-from-a-list-with-multiple-entries-per-row - Si8

6
你可以像这样做:
activeUsers.RemoveAll(u => u.Contains(active_user));

这将匹配并删除所有activeUser元素中包含active_user文本的部分。


1
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);

更简单地说,使用Eric提供的RemoveAll方法。

0

如果我想从列表中删除数字字符串值的项

 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;

这将从列表中删除所有作为字符串具有数字值的项目,并仅返回列表项中的字符字符串


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接