如何在 C# 中删除数组中的重复值?
本文关键字:删除 数组 | 更新日期: 2023-09-18 11:27:32
在 C# 中删除数组中的重复值实质上是获取不同的值。在 C# 中,我们无法删除数组中的值。相反,我们将不得不使用我们想要的值创建一个新数组。因此,我们必须从指定的数组中获取非重复值,并创建一个非重复值的新数组,而不是删除重复值。
下面的示例使用 Distinct() 方法从数组中获取不同的值,并创建一个新数组。
示例: Remove duplicate from integer array
int[] nums = { 1, 2, 3, 4, 3, 55, 23, 2 };
int[] dist = nums.Distinct().ToArray();
字符串数组也可以使用同样的情况。
示例: Remove duplicate from string array
string[] animals = { "Cat", "Alligator", "Fox", "Donkey", "Cat" };
string[] dist = animals.Distinct().ToArray();
要删除重复值并从对象数组中获取不同的值,我们需要实现 IEquatable
下面的示例获取 Person 数组的不同数组。
示例: Remove duplicate from object array
Person[] people = {
new Person(){ FirstName="Steve", LastName="Jobs"},
new Person(){ FirstName="Bill", LastName="Gates"},
new Person(){ FirstName="Steve", LastName="Jobs"},
new Person(){ FirstName="Lary", LastName="Page"}
};
var dist = people.Distinct(new PersonNameComparer()).ToArray();
下面的类实现要与 Distinct()
方法一起使用的IEqualityComparer<T>
。
示例: IEqualityComparer<T>
class PersonNameComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.FirstName == y.FirstName && x.LastName == y.LastName;
}
public int GetHashCode(Person obj)
{
return obj.Id.GetHashCode() ^ (obj.FirstName == null ? 0 : obj.FirstName.GetHashCode()) ^ (obj.LastName == null ? 0 :obj.LastName.GetHashCode());
}
}
在上面的Equals()
方法中,我们比较了FirstName
和LastName
。您也可以比较 ID。这取决于您希望如何将其视为平等。
您还可以在 Person 类本身中实现IEquatable<T>
以获得相同的结果。
示例: IEquatable<T>
class Person : IEquatable<Person>
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Equals(Person other)
{
return FirstName.Equals(other.FirstName) && LastName.Equals(other.LastName);
}
public override int GetHashCode()
{
return Id.GetHashCode() ^ (FirstName == null ? 0 : FirstName.GetHashCode()) ^ (LastName == null ? 0 : LastName.GetHashCode());
}
}
现在,我们可以在不传递参数的情况下获得不同的人 Distinct()
方法,如下所示。
示例: Get distinct values from object array
Person[] people = {
new Person(){ FirstName="Steve", LastName="Jobs"},
new Person(){ FirstName="Bill", LastName="Gates"},
new Person(){ FirstName="Steve", LastName="Jobs"},
new Person(){ FirstName="Lary", LastName="Page"}
};
var dist = people.Distinct().ToArray();
因此,我们可以在 C# 中获取不同的值并从数组中删除重复值。