【问题标题】:Removing an element from list if it contains particular text in it如果列表中包含特定文本,则从列表中删除该元素
【发布时间】:2014-06-27 12:55:13
【问题描述】:

我有一个 C# 方法,在该方法中,我在列表中查找某些文本,例如 username,其中元素的格式为 username + datetime,如果文本的任何部分与列表中的元素匹配,则整个元素必须是从列表中删除

添加到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);
}

【问题讨论】:

    标签: c# visual-studio-2012 arraylist


    【解决方案1】:

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

    您可以使用正则表达式进行测试,或者如果用户名没有括号,请按以下方式进行测试:

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

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

    【讨论】:

    • 对我的使用来说似乎很完美
    • 如果我想检查更多条件怎么办?
    • @Si8 只需使用 &&。 activeUsers.RemoveAll(u =&gt; u.StartsWith(comp) &amp;&amp; somethingelse &amp;&amp; somethingelse2);
    • 谢谢。如果您愿意提供帮助,我在这里发布了我的问题...stackoverflow.com/questions/41487624/…
    【解决方案2】:

    你可以这样做

    activeUsers.RemoveAll(u => u.Contains(active_user));
    

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

    【讨论】:

      【解决方案3】:
      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 方法。

      【讨论】:

        【解决方案4】:

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

         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;
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-17
          • 1970-01-01
          • 1970-01-01
          • 2022-11-14
          • 2021-07-20
          • 1970-01-01
          • 2011-03-25
          相关资源
          最近更新 更多