Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq中阵列变化的检测_C#_Performance_Linq - Fatal编程技术网

C# linq中阵列变化的检测

C# linq中阵列变化的检测,c#,performance,linq,C#,Performance,Linq,获取这样的字节数组[0,0,0,0,1,1,1,1,1,3,3,3,0,0,0,0] 有人知道如何在linq中有效地检测从1到3的更改吗?如果您想以最有效的方式查找所有更改索引: List<int> changeIndexes = new List<int>(); for(int i = 1; i < array.Length; i++) if(array[i] != array[i-1]) changeIndexes.Add(i); 为什

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


有人知道如何在linq中有效地检测从1到3的更改吗?

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

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

为什么
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];
}

欢迎来到StackOverflow!你需要更具体一些。“发现变化”是什么意思?你试着实现了什么?你想让前3个出现在1之后的索引吗?你认为使用循环而不是linq查询更好吗?是的,
linq
对这种情况不是最好的。那么使用select distinct:var list=arrayByte.select(e=>e).distinct().ToList()怎么样然后循环它?
Distinct
将找到不同的元素,但是如何识别hikes呢?我不知道这个数组是如何记录的。所以我想用一个独特的Linq对它进行排序,以缩短它。然后,可能我将能够更有效地完成它,因为我将有更少的项目循环
bool var list=arrayByte.Select(e=>e.Distinct().ToArray();对于(inti=0;i
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];
}
int previous = array[0];

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