gpt4 book ai didi

c# - 如何删除列表中的重复对

转载 作者:太空狗 更新时间:2023-10-29 20:49:07 24 4
gpt4 key购买 nike

我得到了一个包含整数对的列表。如果它们是重复的,我该如何删除它们? Distinct 不起作用,因为这对可能是 (2, 1) 而不是 (1, 2)。

我的列表是这样的:

1, 2
2, 3
3, 1
3, 2
2, 4
4, 3

...我不需要 (2, 3) 和 (3, 2)

我做了一个public struct FaceLinepublic int AB , 然后 var faceline = new List<FaceLine>(); .

我是 C# 的新手,迷路了。

最佳答案

您可以使用自定义 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;
}
}

那么查询就很简单了:

var comparer = new UnorderedFacelineComparer();
List<FaceLine> nonDupList = faceLine
.GroupBy(fl => fl, comparer)
.Where(g => g.Count() == 1)
.Select(g => g.First())
.ToList();

如果您想保留其中一个副本,您只需删除 Where :

List<FaceLine> nonDupList = faceLine
.GroupBy(fl => fl, comparer)
.Select(g => g.First())
.ToList();

关于c# - 如何删除列表中的重复对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com