joh*_*nri 6 c# list duplicates
我得到了一对带有整数的List.如果它们是重复的,我该如何删除它们?区别不会工作导致该对可能是(2,1)而不是(1,2).
我的列表看起来像这样:
1, 2
2, 3
3, 1
3, 2
2, 4
4, 3
Run Code Online (Sandbox Code Playgroud)
......我不需要(2,3)和(3,2)
我做了一个public struct FaceLine有public int A和B,然后var faceline = new List<FaceLine>();.
我是C#的新手而且输了.
Tim*_*ter 14
您可以使用自定义IEqualityComparer<FaceLine>:
public class UnorderedFacelineComparer : IEqualityComparer<FaceLine>
{
public bool Equals(FaceLine x, FaceLine y)
{
int x1 = Math.Min(x.A, x.B);
int x2 = Math.Max(x.A, x.B);
int y1 = Math.Min(y.A, y.B);
int y2 = Math.Max(y.A, y.B);
return x1 == y1 && x2 == y2;
}
public int GetHashCode(FaceLine obj)
{
return obj.A ^ obj.B;
}
}
Run Code Online (Sandbox Code Playgroud)
然后查询非常简单:
var comparer = new UnorderedFacelineComparer();
List<FaceLine> nonDupList = faceLine
.GroupBy(fl => fl, comparer)
.Where(g => g.Count() == 1)
.Select(g => g.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
如果你想保留其中一个重复项,你只需要删除Where:
List<FaceLine> nonDupList = faceLine
.GroupBy(fl => fl, comparer)
.Select(g => g.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |