如何在定界字符串的第一个元素上找到部分重复项?

时间:2019-04-10 15:05:21

标签: c# arrays split duplicates partial

我有一个用竖线分隔的文本文件,我将其读入字符串数组。文本文件将包含2个元素,第一个元素可能具有一个或多个重复项。如果有重复项,我想将值连接为1。

示例文本文件:

ABC|111
DEF|222
GHI|333
ABC|444
JKL|555
ABC|666

在此示例中,“ ABC”重复了3次。我想将这些值连接成用'〜'符号分隔的一行。

新的字符串数组值:

ABC|111~444~666
DEF|222
GHI|333
JKL|555

列表的顺序并不重要。我知道如何使用.Distinct()查找 entire 行的重复值,但是我不确定如何仅使用字符串数组的第一个元素来执行此操作。我会提供一些尝试的代码,但老实说,我什至不知道如何开始达到预期的结果。任何帮助表示赞赏!谢谢。

(很抱歉,如果帖子重复,我必须刷新页面。)

编辑 文本文件可以包含10,000-100,000个值。

2 个答案:

答案 0 :(得分:2)

例如,您已经使用Key(例如ABC)和Value(例如111)将输入文件的行解析为一个可枚举的对象列表,您可以使用LINQ {{1 }}做您想做的事情:

GroupBy

var result = table.GroupBy(x => x.Key, v => v.Value) .Select( g => g.Key + "|" + String.Join("~",g)); 是您的可枚举列表。

实时工作代码:https://rextester.com/HGP1385


table

答案 1 :(得分:1)

这是一个快速入门,也许可以帮助您入门:

Dictionary<string,List<string>> unDupe = new Dictionary<string, List<string>>();

for (int i = 0; i < yourArray.Length; i++)
{
    string[] split = yourArray[i].Split('|');
    if (unDupe.ContainsKey(split[0]))
    {
        unDupe[split[0]].Add(split[1]);
    }
    else
    {
        unDupe.Add(split[0], new List<string>() { split[1] });
    }
}

List<string> undupinated = new List<string>();

foreach (var keyValuePair in unDupe)
{
    undupinated.Add(string.Concat(keyValuePair.Key, "|", string.Join("~", keyValuePair.Value)));
}