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