从字符串数组中删除值?

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);
    }
}
  1. 阅读
  2. 中的整个文件
  3. 拉取前 1000 行的副本
  4. Parse/process那1000行
  5. 从原始数组中删除 1000 行
  6. 写回你的文件(当你说删除它们时我假设是这样)

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