从字符串数组中删除值?

时间:2015-04-21 20:35:28

标签: c# arrays visual-studio text-files streamreader

我有150,000行文本文件,它存储为字符串数组:

String[] OutputArray = File.ReadAllLines(TB_Complete.Text);

如何从OutputArray中删除指定的行列表?或者更好的是我如何删除前1000行的OutputArray?

*编辑:我需要前1000行读取,解析,输出到另一个文本文件,然后删除。对不起,我没有澄清。

5 个答案:

答案 0 :(得分:5)

我会使用ReadLines(),因为它返回IEnumerable<string>,然后跳过前1000行。

String[] OutputArray = File.ReadLines(TB_Complete.Text).Skip(1000).ToArray();

答案 1 :(得分:2)

听起来你需要前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);
    }
}

答案 2 :(得分:0)

实际上你的问题是如何从数组中删除一个数组元素,而this post可能很有用,虽然在你的情况下效率不高。

您有没有使用更合适的数据结构? 例如LIST<T>? 元素删除在列表中很容易且非常有效。

答案 3 :(得分:0)

  1. 阅读
  2. 中的整个文件
  3. 拉出前1000行的副本
  4. 解析/处理那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);
    
  7. 您也可以使用Skip。而不是RemoveRange。

    File.WriteAllLines(filePath, outputArray.Skip(1000));
    

答案 4 :(得分:-1)

&#34;如何从OutputArray中删除指定的行列表?&#34;

var removeTheseLines= new string[5];
var lines = new string[10];

var filterLines = lines.Except(removeTheseLines).ToArray();