Tho*_*eld 3 c# linq duplicate-removal
我有一个像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"
};
我需要从列表中删除重复,即,如果存在"AB"和"BA",那么我只需要保留"AB"(第一个条目)
所以结果就像
"A-B"   
"C-D"
"C-E"   
"D-E"
"F-G"
有没有办法用LINQ做到这一点?
gan*_*tas 14
实现IEqualityComparer会在Equals("AB","BA")上返回true.并使用Enumerable.Distinct方法
Fre*_*örk 12
这将返回您查找的序列:
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();
免责声明:此解决方案将始终将值"AB"保持在"BA"之上,而不管原始序列中出现的顺序如何.