我有一个用竖线分隔的文本文件,我将其读入字符串数组。文本文件将包含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个值。
答案 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)));
}