繁体   English   中英

C# 计数出现次数 dataGridView

[英]C# Counting number occurences dataGridView

如图所示,我正在尝试计算某些给定数字的出现次数。

在此处输入图像描述

给程序 5 个数字我想要它 output

Número - 频率 R - 频率 A (1 - 2 - 0.4) (2 - 1 - 0.2) (3 - 2 - 0.4)

Frequência R 是数字出现的次数。

我的问题是计算数字的出现并使用正确的值设置单元格。

Frequência A 是相同的,因为我需要它出现的次数除以总行数。

我该怎么做?

假设 dataGridView1 绑定到 DataTable (在我的示例中为dt ),或者可以,您可以做一些 Linq 功夫来投射另一个可以绑定到第二个网格的集合:

var projection = dt.AsEnumerable()
    .Select(n => n.Field<decimal>("Nome"))
    .GroupBy(d => d)
    .Select(d => new { Numero = d.Key, FrequenciaR = d.Count(), FrequenciaA = (decimal)d.Count() / dt.Rows.Count })
    .ToList();

此代码获取 Nomes 列表并按其值对它们进行分组。 此时您将拥有 3 个 IGrouping。 然后Select组的键(数字),组中有多少的计数,最后是数字除以表中的行数。

projection是一个可以绑定到第二个数据网格的列表。 您当然可以投影到您定义的 class 类型。

更新

您可以直接使用 gridview 行,尽管它有点尴尬。 我鼓励您考虑阅读数据绑定 collections,但试试这个,它与我的第一个示例相同,它只是针对 DataGridViewRowCollection 执行此操作:

var projection2 = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(dgvr => dgvr.Cells[0].Value != null) // don't count blank rows
    .Select(dgvr => (decimal)dgvr.Cells[0].Value )
    .GroupBy(d => d)
    .Select(d => new { Numero = d.Key, FrequenciaR = d.Count(), FrequenciaA = (decimal)d.Count() / (dataGridView1.Rows.Count - 1) }) // count - 1 to exclude last edit row
    .ToList();

如果你有 LINQPad,你可以运行我的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM