c# string 去除重复问题

w3c113 2014-10-31 11:09:20
宝安支行:安乐支行、宝安支行:宝安支行营业部、宝安支行:宝城支行、宝安支行:开屏支行、宝安支行:创业支行、宝安支行:上合支行、宝安支行:翻身支行@福永支行:桥头支行、福永支行:福永支行营业部、福永支行:新和支行、福永支行:和平支行、福永支行:凤凰支行、福永支行:福围支行、福永支行:福星支行、福永支行:塘尾支行、福永支行:兴围支行、福永支行:农电支行@

这是一段字符串,现在要求以 '@' 为分割 ,去除里面的重复支行名称

得到最后结果如下:

宝安支行:安乐支行、宝安支行营业部、宝城支行、开屏支行、创业支行、上合支行、翻身支行@福永支行:桥头支行、福永支行营业部、新和支行、和平支行、凤凰支行、福围支行、福星支行、塘尾支行、兴围支行、农电支行@

这个怎么处理?
...全文
276 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 w3c113 的回复:
能给个注释吗
var r1 = from n in str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)   //@分割
            from m in n.Split(new char[] { '、' }, StringSplitOptions.RemoveEmptyEntries)    //、分割
            let k = m.Split(':')       //获得所有的“支行、营业部”配对,放入k[0]、k[1]中
            group k by k[0] into g      //按照支行分组,准备把营业部查询出来
            let list = from x in g select x[1]     //查询g变量中保存的每一个分组的营业部名称
            select g.Key + ":" + string.Join("、", list.ToArray());     //生成多个“支行:营业部列表”
var r2 = string.Join("@", r1.ToArray()) + "@";      //最后用@连接各个支行的列表,并且最后添加一个@符号
天下如山 2014-10-31
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
可以这样计算
var r1 = from n in str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
            from m in n.Split(new char[] { '、' }, StringSplitOptions.RemoveEmptyEntries)
            let k = m.Split(':')
            group k by k[0] into g
            select g.Key + ":" + string.Join("、", (from x in g select x[1]).ToArray());
var r2 = string.Join("@", r1.ToArray()) + "@";
这Linq舒坦啊。
w3c113 2014-10-31
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
可以这样计算
var r1 = from n in str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
            from m in n.Split(new char[] { '、' }, StringSplitOptions.RemoveEmptyEntries)
            let k = m.Split(':')
            group k by k[0] into g
            select g.Key + ":" + string.Join("、", (from x in g select x[1]).ToArray());
var r2 = string.Join("@", r1.ToArray()) + "@";
能给个注释吗
於黾 2014-10-31
  • 打赏
  • 举报
回复
先用@分割 然后用、分割 变成数组: 宝安支行:安乐支行 宝安支行:宝安支行营业部 宝安支行:宝城支行 宝安支行:开屏支行 宝安支行:创业支行 宝安支行:上合支行 宝安支行:翻身支行 福永支行:桥头支行 福永支行:福永支行营业部 福永支行:新和支行 福永支行:和平支行 福永支行:凤凰支行 福永支行:福围支行 福永支行:福星支行 福永支行:塘尾支行 福永支行:兴围支行 福永支行:农电支行 然后按:分割 第一个把:之前的也拼接到字符串的最前面,从第二个开始,只取:之后的部分往下拼接
  • 打赏
  • 举报
回复
你写的文字“去除里面的重复支行名称”误导了别人,他们一见这个字眼就去想到 Dictinct了。其实不是这个意思,是你用错了名词儿。
  • 打赏
  • 举报
回复
可以这样计算
var r1 = from n in str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
            from m in n.Split(new char[] { '、' }, StringSplitOptions.RemoveEmptyEntries)
            let k = m.Split(':')
            group k by k[0] into g
            select g.Key + ":" + string.Join("、", (from x in g select x[1]).ToArray());
var r2 = string.Join("@", r1.ToArray()) + "@";
w3c113 2014-10-31
  • 打赏
  • 举报
回复
引用 1 楼 q107770540 的回复:
	string str="宝安支行:安乐支行、宝安支行:宝安支行营业部、宝安支行:宝城支行、宝安支行:开屏支行、宝安支行:创业支行、宝安支行:上合支行、宝安支行:翻身支行@福永支行:桥头支行、福永支行:福永支行营业部、福永支行:新和支行、福永支行:和平支行、福永支行:凤凰支行、福永支行:福围支行、福永支行:福星支行、福永支行:塘尾支行、福永支行:兴围支行、福永支行:农电支行@";
	
	string result= string.Join("、",str.Split('@').Select(x=>x.Split(new char[]{':','、'}).Distinct()).SelectMany(x=>x).ToArray());
你这样写 ,得到的值是 宝安支行、安乐支行、宝安支行营业部、宝城支行、开屏支行、创业支行、上合支行、翻身支行、福永支行、桥头支行、福永支行营业部、新和支行、和平支行、凤凰支行、福围支行、福星支行、塘尾支行、兴围支行、农电支行、 但我要求的是: 宝安支行:安乐支行、宝安支行营业部、宝城支行、开屏支行、创业支行、上合支行、翻身支行@福永支行:桥头支行、福永支行营业部、新和支行、和平支行、凤凰支行、福围支行、福星支行、塘尾支行、兴围支行、农电支行@
天下如山 2014-10-31
  • 打赏
  • 举报
回复
分割为数组 然后Linq去重复。
q107770540 2014-10-31
  • 打赏
  • 举报
回复
	string str="宝安支行:安乐支行、宝安支行:宝安支行营业部、宝安支行:宝城支行、宝安支行:开屏支行、宝安支行:创业支行、宝安支行:上合支行、宝安支行:翻身支行@福永支行:桥头支行、福永支行:福永支行营业部、福永支行:新和支行、福永支行:和平支行、福永支行:凤凰支行、福永支行:福围支行、福永支行:福星支行、福永支行:塘尾支行、福永支行:兴围支行、福永支行:农电支行@";
	
	string result= string.Join("、",str.Split('@').Select(x=>x.Split(new char[]{':','、'}).Distinct()).SelectMany(x=>x).ToArray());

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧