gpt4 book ai didi

c# - 如何使用 LINQ 对列表的列表进行分组(例如 : List>)

转载 作者:行者123 更新时间:2023-12-03 03:29:00 24 4
gpt4 key购买 nike

我知道我可以使用一些 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>());

关于c# - 如何使用 LINQ 对列表的列表进行分组(例如 : List<List<int>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com