我有一个List<type1> listOfObjectsstatic方法

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/

10-17 02:48