gpt4 book ai didi

c# - 使用 LINQ 返回不同值的平均值

转载 作者:行者123 更新时间:2023-11-30 21:41:36 24 4
gpt4 key购买 nike

我对 LINQ 没有太多经验,并且我在使用 LINQ 根据不同列中的不同值提取 ListView 的列的平均值、众数和中值时遇到了困难。

例如,考虑以下数据:

ReportID  TAT  Col3  Col4  etc...
-------- --- ---- ---- -------
80424 9 1 7 ...
80424 9 2 3 ...
80424 9 2 2 ...
80423 5 1 5 ...
80425 4 1 5 ...
80423 7 1 4 ...
82541 7 1 5 ...

要提取 TAT(周转时间)大于 5 天的不同报告的计数,我使用以下方法:

int countDistinctReports = (from ListViewItem itm in lvList.Items
where itm.SubItems[1].Text) > 5
select itm.SubItems[0].Text
).Distinct().Count();

countDistinctReports 的值为 3。

为了提取这些报告的最小 TAT,我使用了这个:

string minVal = (from ListViewItem itm in lvList.Items
where itm.SubItems[1].Text) > 5
select itm.SubItems[1].Text
).Min();

minVal 的值为 7。

但是,我不知道如何编写 LINQ 表达式来计算 TAT 大于 5 的不同报告的平均值、众数和中值 TAT。在上面的例子中,平均值应该是 (9+7+7 )/3 = 7.67。众数应该是7。

有人可以帮忙吗?非常感谢。

最佳答案

这是重现并解决的问题,仅使用 linq 1-liners:

using System;
using System.Linq;

namespace StackOverflow_StatisticsLinq
{
class Program
{
static void Main(string[] args)
{
var reports = new int[][]
{
new int[] {80424, 9, 1, 7},
new int[] {80424, 9, 2, 3},
new int[] {80424, 9, 2, 2},
new int[] {80423, 5, 1, 5},
new int[] {80425, 4, 1, 5},
new int[] {80423, 7, 1, 4},
new int[] {80541, 7, 1, 5}
};

var reportsTat5Plus = (
from int[] r in reports
where r[1] > 5
orderby r[1] descending
select r)
.GroupBy(r => r[0])
.Select(r => r.First()); // ensure ids are distinct

var average = reportsTat5Plus.Select(r => r[1]).Average();

var mode = reportsTat5Plus.GroupBy(v => v)
.OrderByDescending(g => g.Count())
.First()
.Select(r => r[1])
.First();

var median = reportsTat5Plus.Count() % 2 == 1
? reportsTat5Plus.Skip(reportsTat5Plus.Count() / 2 + 1).Select(r => r[1]).First()
: reportsTat5Plus.Skip(reportsTat5Plus.Count() / 2 - 1).Take(2).Select(r => r[1]).Average();

Console.WriteLine($"Average: {average}");
Console.WriteLine($"mode: {mode}");
Console.WriteLine($"median: {median}");
Console.ReadKey();
}
}
}

关于c# - 使用 LINQ 返回不同值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134692/

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