Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串数组中删除值?_C#_Arrays_Visual Studio_Text Files_Streamreader - Fatal编程技术网

C# 从字符串数组中删除值?

C# 从字符串数组中删除值?,c#,arrays,visual-studio,text-files,streamreader,C#,Arrays,Visual Studio,Text Files,Streamreader,我有150000行文本文件,该文件存储为字符串数组,如下所示: String[] OutputArray = File.ReadAllLines(TB_Complete.Text); 如何从OutputArray中删除指定的行列表?或者更好的是,如何删除OutputArray的前1000行 *编辑:我需要前1000行被读取,解析,输出到另一个文本文件,然后删除。对不起,我没有澄清 我会使用ReadLines,因为它返回一个IEnumerable,然后跳过前1000行 String[] Outp

我有150000行文本文件,该文件存储为字符串数组,如下所示:

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

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

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

我会使用ReadLines,因为它返回一个IEnumerable,然后跳过前1000行

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

如何从OutputArray中删除指定的行列表

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

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

实际上,您的问题是如何从数组中删除数组元素,而post在您的情况下可能很有用,但效率不高

您是否需要使用更合适的数据结构? 例如一份清单?
在列表中删除元素很容易,而且效率很高。

听起来你需要前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行的副本 分析/处理这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);


如果不首先读取前1000行,您真的需要将150k行读取到一个数组中吗?例如,与File.ReadLinespath.Skip1000{…}中的foreachvar行相比,这通常是一个非常糟糕的主意,它将在不同时加载所有数据的情况下对数据进行流式处理?您应该考虑改用List。对于数组imo来说,它更容易使用。我需要将它们读取、存储并输出到另一个文本文件中,然后如上所述将其删除。@ErickAlfaro,这其中的哪一部分要求它们位于数组中?@Alex it不这样做;ReadLines是非缓冲操作,我错了,我认为它也包含ReadAllLines。它不分配2 x 150000个字符串,只分配一个。但问题仍然是OP是否真的需要这个?对不起,我没有具体说明。我需要读取、解析前1000行,输出到另一个文本文件中,然后删除。@ErickAlfaro从文件中删除了吗?还是从阵列中?内存中是否需要其他140k行?对不起,我很挑剔,但像这样的问题,细节就是一切。我想我们可以假设前1000行的意思是:跳过1000行-不要忽略前1000行中发生的所有事件;对不起,我没有具体说明。我需要将前1000行内容读取、解析、输出到另一个文本文件中,然后删除。@Marc gravel:TBH,从海报的编辑判断,我不确定是否有人知道需要什么。埃里克·阿尔法罗:我期待着一再要求澄清。“我现在退场,而不是晚一点。”MarcGravel我在早些时候发布了一个更详细的问题,英国电信没有收到任何回应。我想我会让它安静下来。从列表的开头删除是没有效率的——根本没有效率;您仍然需要对剩余数据进行内存拷贝。即使这样,也假设您使用RemoveAnge而不是单独删除,这将是灾难性的糟糕。使用列表对数组的影响很小——它不是一个灵丹妙药。别误会我的意思——我很可能会在这里使用一个列表;但这并不是让它从难变容易的原因。@MarcGravel我同意,我没有说这很容易,也没有说列表是一颗神奇的子弹。我知道remove方法是一个On操作,但是在这个具体的问题中,这个具体的数字是150.000个元素,删除了1000个元素,我认为性能没有那么大的问题。此外,RemoveRange并非一种糟糕的方法,因为内存拷贝有时是“最佳”解决方案|从op提供的附加信息来看,基本问题似乎是一次加载150k行文本,因此这绝对是该特定问题的首选答案。感谢您的回复!我将尝试在我的代码中实现这一点。下面是我试图简化的确切代码。不客气。。。如果这不是你想要的,在你的问题中提供更多的澄清。
File.WriteAllLines(filePath, outputArray.Skip(1000));