C#删除重复的子串后获取第一行

时间:2017-05-17 13:15:45

标签: c# linq

我有一个包含许多重复子字符串的文件,并希望删除它们并仅保留第一个并在richtextbox中写入第一个子字符串的整行,在我的代码中我收到以下错误:

  

System.Linq.Enumerable + WhereSelectArrayIterator`2 [System.String,系统

var FilePrefixes = File.ReadAllLines(FILE)
            .Select(line => line.Split(',')[0]);

var dupsubstrings= File.ReadAllLines(FILE)
    .Where(line => FilePrefixes.Count() > 1).Select(line => line.First());

richTextBox1.AppendText(dupsubstrings+ Environment.NewLine);

2 个答案:

答案 0 :(得分:3)

你在这做什么:

.Select(line => line.First());

选择每一行的第一个字符。我希望这不是你想做的,而是选择第一行(正如你在问题中所说的那样)。

要选择第一行,请将.Select更改为:

.First();

答案 1 :(得分:1)

您可以尝试GroupBy问题的子字符串,然后从每个分组块中获取First项:

 var distinctStrings = File
   .ReadLines(FILE)                          // No "All"
   .GroupBy(line => line.Split(',')[0],      // group by prefix
            (key, chunk) => chunk.First());  // take 1st ocurrence from each group

 // Join all distinct strings into one  
 richTextBox1.AppendText(string.Join(Environment.NewLine, distinctStrings));

请避免ReadAllLines(阅读所有行,然后才开始处理它们)和双重文件打开File.ReadAllLines(FILE)然后{{ 1}})