加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用LINQ从List中删除重复的组合

发布时间:2020-12-15 20:53:18 所属栏目:百科 来源:网络整理
导读:我有一个像List的字符串 Liststring MyList = new Liststring{ "A-B","B-A","C-D","C-E","D-C","D-E","E-C","E-D","F-G","G-F"}; 我需要删除列表中的副本,即如果存在“A-B”和“B-A”,那么我只需要保留“A-B”(第一个条目) 所以结果就像 "A-B" "C-D""C-E" "D
我有一个像List的字符串

List<string> MyList = new List<string>
{ 
    "A-B","B-A","C-D","C-E","D-C","D-E","E-C","E-D","F-G","G-F"
};

我需要删除列表中的副本,即如果存在“A-B”和“B-A”,那么我只需要保留“A-B”(第一个条目)

所以结果就像

"A-B"   
"C-D"
"C-E"   
"D-E"
"F-G"

有没有办法用LINQ做到这一点?

解决方法

这将返回您查找的序列:

var result = MyList
    .Select(s => s.Split('-').OrderBy(s1 => s1))
    .Select(a => string.Join("-",a.ToArray()))
    .Distinct();

foreach (var str in result)
{
    Console.WriteLine(str);
}

简而言之:将 – 字符上的每个字符串拆分为两个元素的数组.对每个数组进行排序,然后将它们连接在一起然后,您只需使用Distinct即可获得唯一值.

更新:在考虑更多时,我意识到您可以轻松删除其中一个Select调用:

var result = MyList
    .Select(s => string.Join("-",s.Split('-').OrderBy(s1 => s1).ToArray()))
    .Distinct();

免责声明:此解决方案将始终将值“A-B”保持在“B-A”之上,而不管原始序列中出现的顺序如何.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读