簡體   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