C# 如何使用条件从列表中删除元素

C# 如何使用条件从列表中删除元素,c#,C#,这是我要添加到列表中的字符串 1第一行\n 第二行\n 第三行\n 3第四行\n 列表列表字符串; listString=data.Split('\n').ToList(); 现在,我想从这个列表中删除那些以数字开头的元素 当前循环列表并删除以数字开头的元素 这是唯一的方法还是我们可以做得更好,因为列表非常大。试试这个: listString.RemoveAll(x => Char.IsDigit(x[0])); 为了提高效率,最好的办法可能是在读取字符串时同时执行这两个操作。借用以

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

1第一行\n
第二行\n
第三行\n
3第四行\n
列表列表字符串;
listString=data.Split('\n').ToList();

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

当前循环列表并删除以数字开头的元素

这是唯一的方法还是我们可以做得更好,因为列表非常大。

试试这个:

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

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

List lineString=new List();
使用(StringReader=新StringReader(数据))
{
弦线;
做
{
line=reader.ReadLine();
如果(line!=null&&line.Length>0&&!Char.isDigit(line.First())
{
lineString.add(行);
}
}while(line!=null);
}

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

一行可能以一个负数开始

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));
string data=“-12第一行\n”+
“第二行\n”+
“第三行\n”+
“34第四行\n”;
List listString=新列表(data.Split(“\n”.ToCharArray(),StringSplitOptions.RemoveEmptyEntries));
Console.WriteLine(“之前:”);
ForEach(x=>Console.WriteLine(x));
RemoveAll(x=>Int32.TryParse(x.Split()[0],out int tmp));
控制台。WriteLine(“在:”)之后;
ForEach(x=>Console.WriteLine(x));

试试这个=>listString.RemoveAll(x=>!string.IsNullOrWhiteSpace(x)和&Char.IsNumber(x.Trim()[0]);“我想删除那些以数字开头的元素”我们不应该删除
然后呢?
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);
}
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));