【问题标题】:Linq - Get the Index of the Last Non-Zero Number of ArrayLinq - 获取最后一个非零数组的索引
【发布时间】:2012-12-27 03:39:23
【问题描述】:

是否有一个 Linq 表达式可以返回数组中最后一个非零值的索引?我对扩展不感兴趣,只对一个简单的 linq 表达式感兴趣。

我在想象类似这样的伪代码:

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

返回值应该是2;

【问题讨论】:

    标签: c# .net arrays linq


    【解决方案1】:

    您可以为此使用Array.FindLastIndex<T> 方法:

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

    我注意到您在问题文本中提到“非零”而不是“大于零”。您的谓词应该是:item => item != 0 吗?

    【讨论】:

    • 这正是我正在寻找的答案。谢谢。这带来了一个问题,如果我键入“myIntArray”,为什么 Intellisense 不显示 FindLastIndex。 - 它显示了许多其他方法。如果我输入“数组”,它会显示。
    • 因为它是Array 类上的静态方法;不是实例方法。
    • 啊。再次感谢。似乎应该有某种方式让 Intellisense 为开发人员提供额外静态方法可用的线索。我只是在 Intellisense 可以帮助预防的事情上花了几个小时。
    • 这就是扩展方法发挥作用的地方
    【解决方案2】:

    List<T> 对此有一个扩展方法,称为FindLastIndex

    var index = new int[] { 0, 2, 1}.ToList().FindLastIndex(x => x > 0);
    

    【讨论】:

      【解决方案3】:
      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();
      

      【讨论】:

        猜你喜欢
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 2014-09-27
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多