【问题标题】:Count and total repeating occurrences of a unique values in DataGridView columnDataGridView 列中唯一值的重复出现次数和总数
【发布时间】:2014-03-03 14:42:28
【问题描述】:

编辑最初的问题:计数和总重复出现在特定数组位置的数字 - 即数组 [34] 中有多少个 0。

更改为 DataGridView 列中唯一值的重复出现次数和总数

这是因为我觉得我问错了问题,而新问题更准确地说明了我在寻找什么

这正是我想要的:http://www.codeproject.com/Tips/421557/Counting-Unique-Products-in-a-DataGridView-and-Dis

我显然可以更好地描述这个问题。

我有一个填充了随机访问文件的字节数组,我想计算次数,比如说,0 或 127 出现在某个位置。目前,我可以将成功匹配的数量计算为几个数字,但问题是总计。我试过这个:(不出所料不起作用)

if (array[34] == 0)
{
    Label_a.Text = "abc";
}

int res_a = Regex.Matches(array[34].ToString(), "0").Count;

如果我使用 res_a 创建一个 MessageBox,它会通过显示设置的消息来识别它是否为 0。但我想计算和汇总背景中出现的次数,总计数据将被填充到图表中。当前代码的总体布局:

// FileStream
// BinaryReader
// While length of file is larger than 0
// FileStream.Seek
// Foreach loop for array
// GET COUNT AND TOTAL HERE!

例如,我导入了一个包含 4 条不同状态记录的文件,其中状态码 127 重复了 3 次,而 0 只是一次。我想获取此信息 - 它发生了多少次!

另一个例子,这个文件有 12 条记录,其中状态码 127 重复了 6 次,0 也是 6:-

【问题讨论】:

  • 你的框架版本支持 Linq 吗?
  • 哦!是的,我使用的是 .NET Framework 3.5。
  • 您在此处使用的字符串看起来很可疑。似乎您正在将数值转换为字符串并使用正则表达式来测试以字符串形式表示的数字的相等性。几个问题:当您不使用任何特定的正则表达式功能时,为什么在这里使用正则表达式?你的数组中有什么(它有什么类型)?
  • 我真的不知道从哪里开始,所以只使用了正则表达式,并不惊讶它不起作用。该数组由 .bin 文件中的数据填充,然后将每个元素解码为字符串、int、datetime、long...

标签: c# .net arrays winforms


【解决方案1】:

根据您对 L.B. 的评论,我知道您想计算每个“状态”值的出现次数,所以我会尝试这样的事情:

int[] vals = new int[10] { 1, 1, 2, 2, 3, 3, 3, 4, 4, 1 };
var res = vals.GroupBy(v => v).ToDictionary(g => g.Key, g => g.Count());

res 现在拥有一个字典,其中每个 KeyValuePair 都有一个表示状态代码的键和一个表示此状态代码在数组中的次数的值。

您现在可以像这样测试状态代码的出现次数:

int Code1;
res.TryGetValue(1, out Code1); // testing for Status code 1

等等。

干杯

【讨论】:

  • @lornasw 我很感激你想通过修复他们的代码来帮助人们,但是在 Stack Exchange 上你不应该编辑代码,除非它是你的。更好的选择是在帖子上发表评论,告诉作者他们的代码是错误的。
  • 注意,谢谢。在同一行@LucMorin 上有一个相同值的双变量声明
【解决方案2】:

你不能这样做吗?

var countOf0s = array.Count(x => x == 0);

【讨论】:

  • 当我只想计算单个元素/位置时,我确定它只计算整个数组?
  • @lornasw,不清楚你在问什么,一个位置只能有 一个数字。
  • 也许我没有详细说明 - 我有一个由随机访问的 .bin 文件填充的 DataGridView 表。当我选择行记录时,字段会填充表格中未显示的数据。当我遍历一个文件时,一个位置有几个值。例如,我选择状态为“0”的第 24 行,然后选择状态为“13”的行“13”,依此类推。我想做的是计算和总计出现“0”和“13”的次数。
猜你喜欢
  • 2020-08-19
  • 2019-08-12
  • 2020-10-07
  • 2012-10-25
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多