检测linq中的数组变化

时间:2016-06-28 08:32:13

标签: c# performance linq

获取像这样的字节数组[0,0,0,0,0,1,1,1,1,3,3,3,3,0,0,0,0,0]

有没有人知道如何在linq中有效地检测1到3的变化?

2 个答案:

答案 0 :(得分:0)

如果您想以最有效的方式找到所有变更索引:

List<int> changeIndexes = new List<int>();
for(int i = 1; i < array.Length; i++)
    if(array[i] != array[i-1])
        changeIndexes.Add(i);

Linq并不是索引的最佳工具。

如果您只想找到1更改为3的索引,请相应地修改条件:

if(array[i] == 3 && array[i-1] == 1) ...  // break the loop if you only want to find the first

答案 1 :(得分:0)

为什么Linq?你可以通过简单的循环实现这一点。

int previous = array[0];
for(int i=1;i< array.Length;i++)
{
    if(Math.Abs(array[i]- previous) > 1)  // use appropriate jump
    {
        //logic
    }   
    previous = array[i];
}

如果您正在寻找Linq解决方案,可以这样做。

int previous = array[0];

array.FirstOrDefault(x=> 
      {
           var retValue = Math.Abs(x- previous) > 1;
           previous = x;
           return retValue;
      });