2012-12-27 128 views
5

是否有Linq表達式返回數組中最後一個非零值的索引?我對擴展不感興趣,只是一個簡單的linq表達式。Linq - 獲取最後一個非零值數組的索引

我想象這樣的僞代碼:

int index = {0, 2, 1}.LastOrDefaultAt(i => i > 0); 

返回的值應爲2;

回答

7

您可以使用此Array.FindLastIndex<T>方法:你提到「非零」

int index = Array.FindLastIndex(myIntArray, item => item > 0); 

我注意到,而大於」比你的問題文本中的「零」。如果你的謂詞是:item => item != 0

+0

這正是我一直在尋找的答案。謝謝。這引起了爲什麼如果我鍵入「myIntArray」,爲什麼Intellisense不顯示FindLastIndex。 - 它顯示了許多其他方法。它確實顯示我是否鍵入「陣列」。 – BSalita

+1

因爲它是'Array'類的靜態方法;不是實例方法。 – Ani

+0

啊。再次感謝。似乎Intellisense應該有某種方式來爲開發人員提供其他靜態方法可用的線索。我只是花了幾個小時來處理Intellisense可能幫助阻止的事情。 – BSalita

1

List<T>有此擴展方法稱爲FindLastIndex

var index = new int[] { 0, 2, 1}.ToList().FindLastIndex(x => x > 0); 
0
class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] index = { 0, 2, 1 }; 

     var query = from p in index 
        where p != 0 
        orderby p descending 
        select p; 

     Console.WriteLine(query.FirstOrDefault()); 
     Console.ReadKey(); 
    } 
} 

輸出:如果需要的話2.可以寫在方法的語法:

var index = new int[] { 0, 2, 1 }.Where(a => a != 0).OrderByDescending(a => a).FirstOrDefault(); 
相關問題