.GroupBy(x => x)
.GroupBy用于对类似类型的字符串,int等进行分组。 然后我可以使用什么功能来组合List<串GT;类似的。
答案 0 :(得分:2)
GroupBy
依赖于以适当方式实现Equals
/ GetHashCode
的元素类型。
您的问题不明确,但我的猜测是您希望两个具有相同元素的列表被视为相等。我怀疑您需要编写自己的IEqualityComparer
实现,并将其传递给GroupBy
。例如(未经测试):
public class ListEqualityComparer<T> : IEqualityComparer<List<T>>
{
private static readonly EqualityComparer<T> ElementComparer =
EqualityComparer<T>.Default;
public int GetHashCode(List<T> 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<T> first, List<T> second)
{
if (first == second)
{
return true;
}
if (first == null || second == null)
{
return false;
}
return first.SequenceEqual(second, ElementComparer);
}
}
您还可以允许每个ListEqualityComparer
实例具有单独的每元素比较器,这将允许您以不区分大小写的方式比较(比方说)字符串列表。
答案 1 :(得分:0)
我假设你问的是如何按自定义类型的对象进行分组。
您需要定义对象应如何相互比较
您可以在IEqualityComparer
来电中指定GroupBy
来执行此操作。
如果未指定IEqualityComparer
,则使用IEqualityComparer.Default
,检查类型T
是否实现System.IEquatable<T>
接口,如果是,则返回{{ 1}}使用该实现。否则,它返回EqualityComparer<T>
,它使用由EqualityComparer<T>
提供的Object.Equals和Object.GetHashCode的覆盖。