Lambda表达式基于C#中的值查找上/下键

本文关键字:查找 下键 表达式 Lambda | 更新日期: 2023-09-27 18:09:13

。NET框架4.6。

给定此排序字典:

var mydict =  new SortedDictionary<int, int> {{1, 0}, {2, 0}, {4, 14}, {8, 33}, {16, 0}, {32, 0} , {64,0} };

我试图找到键"16",因为它是最后一个非零值键之后的第一个值为0的键。

给定此排序字典:

var mydict =  new SortedDictionary<int, int> {{1, 0}, {2, 8}, {4, 0}, {8, 33}, {16, 11}, {32, 0} , {64,0} };

我想找到32的钥匙。

我知道如何通过枚举和临时变量来做到这一点,但我要求使用Lambda。

感谢所有的想法。

Lambda表达式基于C#中的值查找上/下键

只需从Reverse的末尾开始,然后在值为0(TakeWhile(时继续,并获取最后一项(LastOrDefault(的密钥(Select(。

var key = mydict.Reverse()
                .TakeWhile(kvp => kvp.Value == 0)
                .Select(kvp => kvp.Key)
                .LastOrDefault();

顺便说一下,这被称为Linq,而不是lambda,尽管lambda被用作Linq的一部分。

mydict
    .SkipWhile(x => x.Key == 0)
    .Where(x => x.Value == 0)
    .Select(x => x.Key)
    .FirstOrDefault();