2016-06-28 55 views
-1

获取像这样的字节数组[0,0,0,0,0,1,1,1,1,3,3,3,3,0,0,0,0,0 ]在linq中检测数组变化

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

+5

欢迎来到StackOverflow!你需要更具体。 “检测变更”是什么意思?你有什么努力去实现它? –

+0

你想要第一个3出现在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; 
     }); 
+0

你认为使用循环代替linq查询更好吗? – jre

+0

是的,'Linq'不是最好的情况。 –

+0

做什么选择不同:var list = arrayByte.Select(e => e).Distinct()。ToList()然后循环它? – jre

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