计算DataGridView列中唯一值的重复出现次数

时间:2014-03-03 14:42:28

标签: c# .net arrays winforms

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

更改为在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只重复一次。我想获得这些信息 - 它发生了多少次!

enter image description here

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

enter image description here

2 个答案:

答案 0 :(得分:0)

你不能做这样的事吗?

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

答案 1 :(得分:0)

根据你对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现在拥有一个Dictionary,其中每个KeyValuePair都有一个表示状态代码的Key,以及一个表示此Status代码在数组中的时间的值。

您现在可以测试状态代码的外观数量,如下所示:

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

等等。

干杯