C# linq中阵列变化的检测
获取这样的字节数组[0,0,0,0,1,1,1,1,1,3,3,3,0,0,0,0]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); 为什
有人知道如何在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;
});