我知道我可以通过一些for循环轻松地做到这一点,但是想看看是否有办法用流畅的LINQ来做到这一点.我试图找出每个子列表中有多少个.
我在看,Enumerable.SequenceEqual
但无法使用它GroupBy()
说我有List<List<int>
这样的:
{
{1,2}
{2, 3, 4}
{1,2}
{1,3}
{1,2}
}
Run Code Online (Sandbox Code Playgroud)
我希望用相同的列表对它进行分组,就像这样
{
<3, {1,2}>
<1, {2, 3, 4>
<1, {1,3}
}
Run Code Online (Sandbox Code Playgroud)
你需要实现一个IEqualityComparer<List<T>>
,然后你可以传入GroupBy
.例如:
public class ListEqualityComparer<T> : IEqualityComparer<List<T>>
{
public bool Equals(List<T> lhs, List<T> rhs)
{
return lhs.SequenceEqual(rhs);
}
public int GetHashCode(List<T> list)
{
unchecked
{
int hash = 23;
foreach (T item in list)
{
hash = (hash * 31) + (item == null ? 0 : item.GetHashCode());
}
return hash;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
var counts = lists.GroupBy(x => x,
(key, lists) => new { List = key, Count = lists.Count() },
new ListEqualityComparer<int>());
Run Code Online (Sandbox Code Playgroud)