我有一个像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] 举报,一经查实,本站将立刻删除。