gpt4 book ai didi

c# - 对如何在 LINQ to Objects 中实现扩展方法感到困惑

转载 作者:行者123 更新时间:2023-11-30 16:35:52 24 4
gpt4 key购买 nike

对 LINQ 还很陌生,我正在尝试了解扩展方法。我正在尝试做什么:

1) 有一个包含三列的表,col1 (string), col2 (double), col3 (DateTime)

        table1.Rows.Add("string 1", 1, new DateTime(2009, 01, 01));
table1.Rows.Add("string 1", 2, new DateTime(2009, 02, 01));
table1.Rows.Add("string 1",3, new DateTime(2009, 03, 01));
table1.Rows.Add("string 1", 4, new DateTime(2009, 04, 01));
table1.Rows.Add("string 2",1, new DateTime(2009, 05, 01));
table1.Rows.Add("string 2", 1, new DateTime(2009, 06, 01));
table1.Rows.Add("string 2", 5, new DateTime(2009, 07, 01));
table1.Rows.Add("string 3", 6, new DateTime(2009, 08, 01));

2) 我需要编写一个 LINQ 查询以按第 1 列分组,并将分组的行发送到一个返回 double 值的方法。像这样

var query = from t in table1
group t by t.col1 into g
select new { r1 = g.Key, r2=mycalc(g))

3) 并具有扩展功能:

public static double Median(this IEnumerable<DataSet1.DataTable1Row> source)
{
//calc using the grouped row data and return a dobule
}

我已经研究了一段时间,但不太明白。有人可以帮忙吗?

最佳答案

嗯,目前还不完全清楚是哪一位导致了问题。如果您已经完成了 Median 方法,那么您可以将 query 更改为:

var query = from t in table1
group t by t.col1 into g
select new { r1 = g.Key, r2=g.Median() };

Median 位是否给您带来了问题?执行以下操作可能最简单:

public static double Median(this IEnumerable<DataSet1.DataTable1Row> source)
{
List<double> values = source.Select(x => x.col2).ToList();
values.Sort();
if ((values.Count % 2) == 1) // Odd number of values
{
return values[values.Count/2];
}
else // Even number of values: find mean of middle two
{
return (values[values.Count/2] + values[values.Count/2 + 1]) / 2;
}
}

可能有更有效的方法,但我不知道它们...

关于c# - 对如何在 LINQ to Objects 中实现扩展方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1459957/

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