同步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更改为任何更高效的类型.
谢谢
首先,我们需要一种比较这些对象的有效方法.由于默认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)
这将包含列表中的所有用户组,但没有任何重复项.
| 归档时间: |
|
| 查看次数: |
6568 次 |
| 最近记录: |