【问题标题】:How to remove elements from list using a condition如何使用条件从列表中删除元素
【发布时间】:2021-04-05 12:23:23
【问题描述】:

这是我要添加到列表中的字符串

 1 The first line\n
   The Second line\n
   The Third Line\n
 3 The fourth Line\n
 List<string> listString;
 listString = data.Split('\n').ToList();

现在我想从这个列表中删除那些以数字开头的元素。

当前循环遍历列表并删除那些以数字开头的元素。

这是唯一的方法吗,或者我们可以用更好的方法来做,因为列表很大。

【问题讨论】:

  • 试试这个 => listString.RemoveAll(x => !string.IsNullOrWhiteSpace(x) && Char.IsNumber(x.Trim()[0]));

标签: c#


【解决方案1】:

试试这个:

listString.RemoveAll(x => Char.IsDigit(x[0]));

【讨论】:

  • "我想删除那些以数字开头的元素" 那么我们不应该删除!吗?
【解决方案2】:

为了提高效率,最好的办法可能是在读取字符串时同时执行这两项操作。借用this answer的一些代码:

List<string> lineString = new List<string>();
using (StringReader reader = new StringReader(data))
{
    string line;
    do
    {
        line = reader.ReadLine();
        if (line != null && line.Length > 0 && !Char.isDigit(line.First()))
        {
            lineString.add(line);
        }

    } while (line != null);
}

如果您仍然需要代码具有更高的性能,则一个用于逐个字符读取字符串的专用状态机可能会更高效。

【讨论】:

    【解决方案3】:

    如果一行可能以 NEGATIVE 整数开头?

    string data = "-12 The first line\n" +
                    "The Second line\n" +
                    "The Third Line\n" +
                    "34 The fourth Line\n";
    
    
    List<string> listString = new List<string>(data.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
    
    Console.WriteLine("Before:");
    listString.ForEach(x => Console.WriteLine(x));
    
    listString.RemoveAll(x => Int32.TryParse(x.Split()[0], out int tmp));
    
    Console.WriteLine("After:");
    listString.ForEach(x => Console.WriteLine(x));
    

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2014-05-06
      • 2012-12-24
      • 1970-01-01
      • 2017-08-31
      • 2017-12-15
      • 2015-08-21
      • 2021-03-07
      相关资源
      最近更新 更多