c# - 如何在分隔字符串的第一个元素上找到部分重复项?
问题描述
我有一个以管道分隔的文本文件,我将其读入字符串数组。文本文件将有 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() 查找整行的重复值,但我不确定如何仅使用字符串数组的第一个元素来执行此操作。我会提供一些我尝试的代码,但老实说,我什至不知道如何开始达到预期的结果。任何帮助表示赞赏!谢谢。
(抱歉,如果这篇文章重复了。我不得不刷新页面。)
编辑 文本文件可以包含 10,000 - 100,000 个值。
解决方案
例如,假设您已将输入文件的行解析为具有Key
(例如 ABC)和Value
(例如 111)的可枚举对象列表,您可以 sim[ply 使用一些 LINQGroupBy
来做您想做的事情:
var result = table.GroupBy(x => x.Key, v => v.Value)
.Select( g => g.Key + "|" + String.Join("~",g));
table
您的可枚举列表在哪里。
实时工作代码:https ://rextester.com/HGP1385
var input = @"ABC|111
DEF|222
GHI|333
ABC|444
JKL|555
ABC|666";
var table = input.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries)
.Select(x => {
var values = x.Split('|');
return new { Key = values[0], Value = values[1] };
});
var result = table.GroupBy(x => x.Key, v => v.Value)
.Select( g => g.Key + "|" + String.Join("~",g));
foreach(var r in result)
Console.WriteLine(r);
推荐阅读
- javascript - 如果 div 高于父 div,不要使用 height:inherit
- python - python-ldap modrdn 方法和 rename 方法有什么区别?
- .net - Web API 2、OWIN、OAuth、IdentityModel tojen 授权返回“此请求的授权已被拒绝”
- machine-learning - 将音频流式传输到神经网络
- r - 如何在div内的第二个p元素中提取文本
- c# - 在一个视图/页面中实现多个并发 Ajax 请求的最佳方法是什么?
- flutter - Flutter:如何在动画转换小部件上使用 MediaQuery 的值管理转换
- scala - 从 Task[Either[A, Task[B]]] 转换为 Task[Either[A, B]]
- android - Buildozer如何将应用程序与服务打包
- spring-boot - 无法解析插件工件 'org.springframework.boot:org.springframework.boot.gradle.plugin:2.1.6.RELEASE'