gpt4 book ai didi

c# - 使用 GroupBy 计算对象列表中具有相同属性值的对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:32 24 4
gpt4 key购买 nike

我上课了:

public class result
{
public int A;
public int B;
public int C;
}

我列出了它:

public static List<result> results = new List<result>();

然后我用随机数据填充该列表类似于 10,000,000 个条目,其中 a、b 和 c 的值为 0 到 24。

我想在我的控制台中显示找到了什么组合以及有多少在 SQL 中它会是这样的:

SELECT A, B, C, COUNT(*) AS total
FROM results
GROUP BY A, B, C

我已经尝试了很多东西,我想我可以写一本书。我试过的一些东西:

var query1 = results.GroupBy(x => new { x.A, x.B, x.C }).Select(group => new { Value = group.Key, Count = group.Count() });

var query2 = from r in results group r by new { r.A, r.B, r.C } into rGroup select rGroup;

var query3 = results.GroupBy(x => new { x.A, x.B, x.C }) .Where(g => g.Count() > 1).ToDictionary(x => x.Key, y => y.Count());

var query4 = from r in results
group r by new { r.A, r.B, r.C } into rGroup
select new { key = rGroup.Key, cnt = rGroup.Count() };

但似乎没有任何效果。我想取回一个列表,其中包含 a、b、c 值以及已找到的数量。

但我无法让它工作,我尝试了数小时的谷歌搜索并尝试了所有方法,此时我完全迷失了。

最佳答案

为了完整起见,一个完整的例子。

虽然与 nlawalker 的解决方案相同,但生成一个字典。

public class result
{
public int A;
public int B;
public int C;

public result(int a, int b, int c)
{
A = a;
B = b;
C = c;
}
}

static void Main(string[] args)
{
Random r = new Random(23);

var data = new List<result>();
for (int i = 0; i < 100; i++)
data.Add(new result(r.Next(1, 3), r.Next(1, 3), r.Next(1, 3)));

var dic = data
.GroupBy(k => new { k.A, k.B, k.C })
.ToDictionary(g => g.Key, g => g.Count());

foreach (var kvp in dic)
Console.WriteLine($"({kvp.Key.A},{kvp.Key.B},{kvp.Key.C}) : {kvp.Value}");
Console.ReadLine();
}

输出:

(2,2,2) : 13
(1,2,2) : 11
(2,1,1) : 9
(1,1,1) : 16
(1,2,1) : 14
(1,1,2) : 15
(2,1,2) : 7
(2,2,1) : 15

关于c# - 使用 GroupBy 计算对象列表中具有相同属性值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673737/

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