为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除列表中的重复对

如何删除列表中的重复对

C#
不负相思意 2021-06-29 17:57:35
我得到了一个带有整数对的列表。如果它们是重复的,我如何删除它们?Distinct 不起作用,因为这对可能是 (2, 1) 而不是 (1, 2)。我的清单是这样的:1, 22, 33, 13, 22, 44, 3...我不需要 (2, 3) 和 (3, 2)我做了一个public struct FaceLine有public int A和B,然后var faceline = new List<FaceLine>();。我是 C# 的新手并且迷路了。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-07-10
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信