下面我来具体讲解“C# 实现Distinct将对象按条件去重”的完整攻略。这里我们假设有一组学生对象数据,每个学生对象包含学生的姓名和年龄两个属性,我们需要按照年龄去重,保留年龄较大的学生对象。攻略如下:
1. 定义学生类对象
首先,我们需要定义一个学生类对象,用于存储学生的姓名和年龄信息。
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public Student(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
2. 实现自定义比较器
接下来,我们需要实现一个自定义的比较器,用于比较两个学生对象的年龄大小。
public class StudentAgeComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
return x.Age == y.Age;
}
public int GetHashCode(Student obj)
{
return obj.Age.GetHashCode();
}
}
3. 去重操作
最后,我们可以使用Linq的Distinct方法,将学生对象数组按照年龄去重得到新的学生对象数组。
Student[] students = new Student[]{
new Student("张三", 20),
new Student("李四", 21),
new Student("王五", 20),
new Student("赵六", 22),
new Student("小七", 21),
};
Student[] distinctStudents = students.Distinct(new StudentAgeComparer()).ToArray();
上面的代码中,我们首先定义了一个学生对象数组,然后使用Distinct方法进行去重操作,指定了自定义的比较器StudentAgeComparer
。最后将得到的去重后的学生对象数组转化为数组形式输出。
示例说明:
下面给出两个示例,直接调用完整代码实现。
示例1:将学生对象数组按照年龄去重,保留年龄较大的学生对象。
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public Student(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
public class StudentAgeComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
return x.Age == y.Age;
}
public int GetHashCode(Student obj)
{
return obj.Age.GetHashCode();
}
}
class Program
{
static void Main(string[] args)
{
Student[] students = new Student[]{
new Student("张三", 20),
new Student("李四", 21),
new Student("王五", 20),
new Student("赵六", 22),
new Student("小七", 21),
};
Student[] distinctStudents = students.Distinct(new StudentAgeComparer()).ToArray();
foreach (var student in distinctStudents)
{
Console.WriteLine($"Name: {student.Name} Age: {student.Age}");
}
Console.ReadKey();
}
}
输出结果:
Name: 张三 Age: 20
Name: 李四 Age: 21
Name: 赵六 Age: 22
示例2:将商品对象数组按照名称和单价去重,保留单价较大的商品对象。
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
}
public class ProductComparer : IEqualityComparer<Product>
{
public bool Equals(Product x, Product y)
{
return x.Name == y.Name && x.Price == y.Price;
}
public int GetHashCode(Product obj)
{
return (obj.Name + obj.Price.ToString()).GetHashCode();
}
}
class Program
{
static void Main(string[] args)
{
Product[] products = new Product[]{
new Product("Iphone 8 Plus", 6999.99m),
new Product("Macbook Air", 8888.88m),
new Product("Iphone 8 Plus", 8888.88m),
new Product("Iphone X", 9999.99m),
new Product("Iphone X", 18888.88m),
};
Product[] distinctProducts = products.Distinct(new ProductComparer()).ToArray();
foreach (var product in distinctProducts)
{
Console.WriteLine($"Name: {product.Name} Price: {product.Price}");
}
Console.ReadKey();
}
}
输出结果:
Name: Iphone 8 Plus Price: 8888.88
Name: Macbook Air Price: 8888.88
Name: Iphone X Price: 18888.88
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 实现Distinct将对象按条件去重 - Python技术站