[英]C# <LIST> How to check for non-unique values in the list?
这是构造函数(它是完整的,但在这里我只显示第一行):
Public Class Player (string firstName, string lastName, string email)
程序:
Player player1 = new Player("Mike","Dalton", md@mail.com);
Player player2 = new Player("Mario","Davis", mdavis@mail.com);
Player player3 = new Player("Mia","Duncan", md@mail.com);
...
List<Player> players = new List<Player> { player1, player2, player3};
名单上有3名球员。 真正的清单很长。 需要检查所有电子邮件地址是否都是唯一的。
(如您所见:email_player1 = email_player 3)
最后,一条简单的消息 (console.writeline) 应该说明是否存在 email_doubles。
你能帮我吗?
您可以尝试以下方法:
List<string> emailList = players.Select(x => x.Email).ToList();
if (emailList.Count > emailList.Distinct().Count())
{
Console.WriteLine("Duplicate email address found.");
}
如果要专门显示重复的 email 地址,也可以尝试以下方法:
var playersGroupByEmailList = players.GroupBy(x => x.Email).Select(g => new { Email = g.Key, Count = g.Count() });
playersGroupByEmailList = playersGroupByEmailList.Where(x => x.Count > 1).ToList();
if (playersGroupByEmailList.Any())
{
foreach (var playerGroupByEmail in playersGroupByEmailList)
{
Console.WriteLine($"{playerGroupByEmail.Email} is duplicate.");
}
}
试试这个......这将为您提供列表中存在的所有重复电子邮件的列表。
players.GroupBy(x => x.Email).SelectMany(g => g.Skip(1));
Select(...)
将帮助您获取列表中元素的属性。
Distinct()
将帮助您使列表包含列表中的唯一元素。
如果要检查所有元素是否唯一,可以使用:
bool isUnique = players.Select(x => x.Email).Distinct().Count() == players.Select(x => x.Email).Count();
和:
players.Distinct().Count()
:计算唯一元素。players.Count()
:计算列表元素。isUnique = true
),则列表中的所有元素都是唯一的。如果您认为 email 地址就像数据库表的键一样,因为它是唯一的并且只想存储每个键/电子邮件中的一个,那么 List 可能不是最好的集合。
您可以改为使用仅接受唯一项目的HashSet
。
请参阅 Microsoft 文档: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1?redirectedfrom=MSDN&view=net-5.0
你这样声明
HashSet<Player> players = new HashSet<Player>();
当您尝试添加它时,它会根据它是否被接受(唯一)返回 true 到 false。
添加到设置:
if(players.Add(player))
Console.Writeline($"Player {player} was added OK");
else
Console.Writeline($"Player with email {player.Email} already exists in the collection!");
为了检查唯一性,您需要在IEquatable<T>
中实现您的 class
public class Player: IEquatable<Player>
{
public string Email { get; set; }
//Other properties, Constructor & methods etc.
//It is important to implement GetHashCode!
public override int GetHashCode()
{
return Email.GetHashCode();
}
public bool Equals(Player other)
{
return this.Email.Equals(other.Email);
}
}
作为一种基本方法,您可以执行以下操作:
List<string> controlList = new List<string>();
foreach (var player in PlayersInfo)
{
if (controlList.Contains(player.Email))
{
Console.WriteLine("there is a duplicate with" + player.email);
}
else
{
Console.WriteLine(player.Email)
}
controlList.Add(player.Email);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.