同步 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>();
每个组有不同数量的成员。 我怎样才能找出不同之处并将两者合并到一个新列表中?
PS:如果效率更高,我可以将类型从 IList 更改为任何类型。
谢谢
最佳答案
所以首先我们需要一种比较这些对象的有效方法。由于默认的 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();
}
}
现在您有了这个比较器,您可以利用 LINQ 为您完成这项工作:
var combinedList = userGroup1.Union(userGroup2, new UserGroupComparer())
.ToList();
这将包含任一列表中的所有用户组,但没有任何重复项。
关于c# - 同步 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303312/