2016-06-28 51 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