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