2012-12-27 53 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(); 
相关问题