c#中类似类型的分组列表
.GroupBy(x => x)
.GroupBy用于对类似类型的字符串,int等进行分组。 那么我可以使用什么函数对类似的List 进行分组。
GroupBy
依赖于以适当的方式实现Equals
/ GetHashCode
的元素类型。
你的问题不明确,但我的猜测是你想要两个具有相同元素的列表被认为是相同的。 我怀疑你需要编写自己的IEqualityComparer
实现,并将其传递给GroupBy
。 例如(未经测试):
public class ListEqualityComparer : IEqualityComparer> { private static readonly EqualityComparer ElementComparer = EqualityComparer .Default; public int GetHashCode(List input) { if (input == null) { return 0; } // Could use Aggregate for this... int hash = 17; foreach (T item in input) { hash = hash *31 + ElementComparer.GetHashCode(item); } return hash; } public bool Equals(List first, List second) { if (first == second) { return true; } if (first == null || second == null) { return false; } return first.SequenceEqual(second, ElementComparer); } }
您还可以允许每个ListEqualityComparer
实例具有单独的每元素比较器,这将允许您以不区分大小写的方式比较(比方说)字符串列表。
我假设你问的是如何按自定义类型的对象进行分组。
您需要定义对象应如何相互比较。
您可以通过在GroupBy
调用中指定IEqualityComparer
来完成此操作。
如果未指定IEqualityComparer
,则使用IEqualityComparer.Default
,它检查类型T
是否实现System.IEquatable
接口,如果是,则返回使用该实现的EqualityComparer
。 否则,它返回一个EqualityComparer
,它使用由T
提供的Object.Equals和Object.GetHashCode的覆盖。