我有一个List<type1> listOfObjects
和static
方法bool CheckIfObjectsAreEquivalent(type1 obj1, type1 obj2)
。
我想按等效标准对列表进行分组,即具有List<List<type1>> result
,其中每个列表由根据CheckIfObjectsAreEquivalent
等效的对象组成。
另一个重要方面是,我不预先知道此分组将产生多少个不同的列表,因为所有对象可能是等效的,也可能是一个不存在,或者可能有任何数量的等效组。对象listOfObjects
的初始列表可以包含许多对象,要查看其中两个对象是否等效,必须使用CheckIfObjectsAreEquivalent
。
我一直在研究使用.Where
和.GroupBy
的不同选项,但我无法使其正常工作...
有任何想法吗?
提前致谢
最佳答案
您可以实现IEqualityComparer<type1>
接口,然后在GroupBy
中使用实现:
public sealed class MyEqualityComparer : IEqualityComparer<type1> {
public bool Equals(type1 x, type1 y) {
// Your method here
return MyClass.CheckIfObjectsAreEquivalent(x, y);
}
public int GetHashCode(type1 obj) {
//TODO: you have to implement HashCode as well
// return 0; is the WORST possible implementation
// However the code will do for ANY type (type1)
return 0;
}
}
然后,您可以输入:
var result = listOfObjects
.GroupBy(item => item, new MyEqualityComparer())
.Select(chunk => chunk.ToList()) // Let's have List<List<type1>>
.ToList();
关于c# - 按条件分组列表以创建列表列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54145928/