微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个像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”之上,而不管原始序列中出现的顺序如何.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐