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 的一部分。
.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 的一部分。