一行代码分组研华PCI-1711采集卡模拟量waveform数据

  1、数据分组  

简单说一下,假设需要采集3个传感器数据,每个传感器数据长度是2,waveform模式下采集的模拟量格式是{sensor1,sensor2,sensor3,sensor1,sensor2,sensor3,}

这样的一个数组不利于我们运算,这时需要将数组里的每个数据分3组

=>  

{sensor1,sensor1}

{sensor2,sensor2}

{sensor3,sensor3}

 

 

下图是格式说明

 

代码:

string[] strs = { "sensor1", "sensor2", "sensor3", "sensor1", "sensor2", "sensor3" };
            int i = 0;
            int j = -(3);//组数
            var query = from s in strs
                        let num = (i / j * -j) + (++i)
                        group s by num into g
                        select g.ToArray();

思路说明:先创建(let)一个数组,格式{1,2,3,1,2,3},再通过这个数组分组

运行结果如下:  通过ozcode插件可清楚看到linq执行流程

 

   2、求众数

 

 int[] numbers = { 1, 2, 3, 1, 2 };
 var mostPresent1 = numbers.Distinct().Where(i => numbers.Count(j => j == i) == numbers.Distinct().Max(k => numbers.Count(l => l == k)));

思路:

先去掉重复的=》{1,2,3}

在分别判断1,2,3在数组的出现次数=》{2,2,1}----- 即1出现的2次,2出现了1次,3出现了1次

在判断{2,2,1}的最大值=》2 -----出现2次的数为众数

在从原数组中找出现2次的数=》{1,2}

最后找到众数2个

 

posted @ 2021-06-01 14:59  工控废物  阅读(301)  评论(0编辑  收藏  举报