gpt4 book ai didi

c# - 从三个非唯一的 List 中获取一个唯一的 List

转载 作者:行者123 更新时间:2023-11-30 19:30:27 25 4
gpt4 key购买 nike

我有三个 User 列表:

ICollection<User> listOne = _somewhere.GetUsers(1);
ICollection<User> listTwo = _somewhere.GetUsers(2);
ICollection<User> listThree = _somewhere.GetUsers(3);

要比较的“唯一”标识符是一个名为“Email”的字符串字段。

我如何从这三个列表中获得一个唯一的列表(例如没有被骗)。

在使用Except 之前,我从两个 列表中得到了一个唯一列表,但不确定如何使用三个列表?我是否必须对前两个使用 Except,然后对前两个和第三个的结果再次使用?

另外,我应该提一下,用户列表来自外部 Web API 调用,不能保证每个列表都有一个唯一的电子邮件地址列表。

所以我需要两个步骤:

  1. 在每个列表中,摆脱欺骗
  2. 合并三个唯一列表以获得一个唯一列表。

最佳答案

您可以只合并列表并在组合列表上执行一次重复数据删除(使用 Distinct())。

var uniqueList = listOne.Union(listTwo)
.Union(listThree)
.Distinct(new EmailComparer())
.ToList();

对于比较器可以像这样简单:

class EmailComparer : IEqualityComparer<User>
{
public bool Equals(User x, User y)
{
return x.Email == y.Email;
}

public int GetHashCode(User obj)
{
return obj.Email.GetHashCode();
}
}

编辑:

正如评论中指出的,如果我们将自定义电子邮件比较器应用于 Union(),则不需要 Distinct():

var emailComparer = new EmailComparer();
var uniqueList = listOne.Union(listTwo, emailComparer)
.Union(listThree, emailComparer)
.ToList();

关于c# - 从三个非唯一的 List<T> 中获取一个唯一的 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027301/

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