同步2个列表

Mar*_*aro 1 c# .net-3.5

同步2个列表的最快方法是什么?

public class UserGroup
    {
        public UserGroup(string group, string user)
        {
            this.Group = group;
            this.User = user;
        }
        public string Group { get; set; }
        public string User { get; set; }
    }


IList<UserGroup> userGroup1 = new IList<UserGroup>();
IList<UserGroup> userGroup2 = new IList<UserGroup>();
Run Code Online (Sandbox Code Playgroud)

每个小组的成员数量不同.我怎样才能找到不同的并在一个新列表中合并?

PS:我可以将类型从IList更改为任何更高效的类型.

谢谢

Ser*_*rvy 6

首先,我们需要一种比较这些对象的有效方法.由于默认Equals和GetHashCode实现在您的上下文中没有用,您需要覆盖它们,或者创建一个IEqualityComparer.我做了后者,如果你愿意,你可以随意做前者.这是一个简单的比较器:

public class UserGroupComparer : IEqualityComparer<UserGroup>
{
    public bool Equals(UserGroup x, UserGroup y)
    {
        return x.Group == y.Group && x.User == y.User;
    }

    public int GetHashCode(UserGroup obj)
    {
        return 37 * obj.Group.GetHashCode() + 19 * obj.User.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您已经拥有了这个比较器,您可以利用LINQ为您完成工作:

var combinedList = userGroup1.Union(userGroup2, new UserGroupComparer())
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这将包含列表中的所有用户组,但没有任何重复项.