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"
};
Run Code Online (Sandbox Code Playgroud)
我需要从列表中删除重复,即,如果存在"AB"和"BA",那么我只需要保留"AB"(第一个条目)
所以结果就像
"A-B"
"C-D"
"C-E"
"D-E"
"F-G"
Run Code Online (Sandbox Code Playgroud)
有没有办法用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);
}
Run Code Online (Sandbox Code Playgroud)
简而言之:将字符上的每个字符串拆分-为两个元素的数组.对每个数组进行排序,然后将它们连接在一起 然后,您可以简单地使用Distinct获取唯一值.
更新:在考虑更多时,我意识到您可以轻松删除其中一个Select调用:
var result = MyList
.Select(s => string.Join("-", s.Split('-').OrderBy(s1 => s1).ToArray()))
.Distinct();
Run Code Online (Sandbox Code Playgroud)
免责声明:此解决方案将始终将值"AB"保持在"BA"之上,而不管原始序列中出现的顺序如何.