配列内の最後のゼロ以外の値のインデックスを返す Linq 式はありますか? 私は拡張機能には興味がなく、単純な linq 式だけに興味があります。
私はこの疑似コードのようなものを想像しています:
int index = {0, 2, 1}.LastOrDefaultAt(i => i > 0);
戻り値は 2 です。
Array.FindLastIndex<T>
これには次のメソッドを使用できます。
int index = Array.FindLastIndex(myIntArray, item => item > 0);
質問文で「ゼロより大きい」ではなく「ゼロ以外」に言及していることに気付きました。述語は次のようにする必要がありますitem => item != 0
。
List<T>
このための拡張メソッドがありますFindLastIndex
var index = new int[] { 0, 2, 1}.ToList().FindLastIndex(x => x > 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();