Lambda 表达式在 C# 中根据值查找 Top/Bottom 键?

Lambda Expression Find Top/Bottom Key based on Value in C#?

.NET Framework 4.6.

鉴于此 SortedDictionary:

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

我正在尝试查找键“16”,因为它是最后一个非零值键之后的第一个值为 0 的键。

鉴于此 SortedDictionary:

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

我想找到 32 的密​​钥。

我了解如何使用枚举变量和临时变量执行此操作,但我要求使用 Lambda 进行一些巧妙的处理。

感谢所有想法,谢谢。

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

简单地从末尾开始 Reverse 然后在值为 0 (TakeWhile) 时继续并获取最后一项 ([=14=) 的键 (Select) ]).

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

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