簡體   English   中英

如何使用LINQ對列表列表進行分組(例如:列表 <List<int> &gt;)

[英]How to group a list of lists using LINQ (ex: List<List<int>>)

我知道我可以使用一些for循環輕松地做到這一點,但是我想看看是否有一種使用流暢的LINQ的方法。 我試圖找出每個子列表中有多少個。

我當時在看Enumerable.SequenceEqual但無法與GroupBy()

說我有一個List<List<int>像這樣:

{
 {1,2}
 {2, 3, 4}
 {1,2}
 {1,3}
 {1,2}
}

我想按相等的列表將其分組,像這樣

{
 <3, {1,2}>
 <1, {2, 3, 4>
 <1, {1,3}
}

您需要實現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;
        }
    }
}

然后:

var counts = lists.GroupBy(x => x, 
                           (key, lists) => new { List = key, Count = lists.Count() },
                           new ListEqualityComparer<int>());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM