从字符串数组中删除值?
Removing values from string array?
我有 150,000 行的文本文件,它被存储为一个字符串数组:
String[] OutputArray = File.ReadAllLines(TB_Complete.Text);
如何从 OutputArray 中删除指定的行列表?或者更好的是,我如何删除 OutputArray 的前 1000 行?
*编辑:我需要读取、解析前 1000 行,输出到另一个文本文件,然后删除。对不起,我没有澄清。
我会使用 ReadLines()
,因为它 returns 和 IEnumerable<string>
然后跳过前 1000 行。
String[] OutputArray = File.ReadLines(TB_Complete.Text).Skip(1000).ToArray();
"How can I remove a specified list of lines from OutputArray?"
var removeTheseLines= new string[5];
var lines = new string[10];
var filterLines = lines.Except(removeTheseLines).ToArray();
实际上您的问题是如何从数组中删除数组元素,this post 可能很有用,但在您的情况下效率不高。
您有没有想过使用更合适的数据结构?
例如 LIST<T>
?
列表中的元素删除非常简单且非常有效。
听起来你需要前 1000 行做一件事,剩下的 1000 行做另一件事;我会 尝试 并在没有将所有内容保存在内存中的开销的情况下执行此操作,那么如何:
int index = 0;
foreach(var line in File.ReadLines(path)) {
if(index++ < 1000) {
// this is one of the first 1000 lines;
DoA(line);
} else {
// this is one of the other lines
DoB(line);
}
}
- 阅读
中的整个文件
- 拉取前 1000 行的副本
- Parse/process那1000行
- 从原始数组中删除 1000 行
写回你的文件(当你说删除它们时我假设是这样)
List<string> outputArray = File.ReadAllLines(filePath).ToList();
List<string> first1000Lines = outputArray.Take(1000).ToList();
// Do what you need to do with first1000Lines
outputArray.RemoveRange(0, 1000);
File.WriteAllLines(filePath, outputArray);
除了 RemoveRange,您还可以使用 Skip。
File.WriteAllLines(filePath, outputArray.Skip(1000));
我有 150,000 行的文本文件,它被存储为一个字符串数组:
String[] OutputArray = File.ReadAllLines(TB_Complete.Text);
如何从 OutputArray 中删除指定的行列表?或者更好的是,我如何删除 OutputArray 的前 1000 行?
*编辑:我需要读取、解析前 1000 行,输出到另一个文本文件,然后删除。对不起,我没有澄清。
我会使用 ReadLines()
,因为它 returns 和 IEnumerable<string>
然后跳过前 1000 行。
String[] OutputArray = File.ReadLines(TB_Complete.Text).Skip(1000).ToArray();
"How can I remove a specified list of lines from OutputArray?"
var removeTheseLines= new string[5];
var lines = new string[10];
var filterLines = lines.Except(removeTheseLines).ToArray();
实际上您的问题是如何从数组中删除数组元素,this post 可能很有用,但在您的情况下效率不高。
您有没有想过使用更合适的数据结构?
例如 LIST<T>
?
列表中的元素删除非常简单且非常有效。
听起来你需要前 1000 行做一件事,剩下的 1000 行做另一件事;我会 尝试 并在没有将所有内容保存在内存中的开销的情况下执行此操作,那么如何:
int index = 0;
foreach(var line in File.ReadLines(path)) {
if(index++ < 1000) {
// this is one of the first 1000 lines;
DoA(line);
} else {
// this is one of the other lines
DoB(line);
}
}
- 阅读 中的整个文件
- 拉取前 1000 行的副本
- Parse/process那1000行
- 从原始数组中删除 1000 行
写回你的文件(当你说删除它们时我假设是这样)
List<string> outputArray = File.ReadAllLines(filePath).ToList(); List<string> first1000Lines = outputArray.Take(1000).ToList(); // Do what you need to do with first1000Lines outputArray.RemoveRange(0, 1000); File.WriteAllLines(filePath, outputArray);
除了 RemoveRange,您还可以使用 Skip。
File.WriteAllLines(filePath, outputArray.Skip(1000));