Lambda表达式根据C#中的值查找顶部/底部键?

时间:2015-08-21 18:36:24

标签: c# lambda ienumerable

.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} };

我正在努力寻找关键&#34; 16&#34;因为它是第一个值为0的键,它位于最后一个非零值键之后。

鉴于此SortedDictionary:

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

我想找到32的关键。

我理解如何使用枚举和临时变量来执行此操作,但我要求使用Lambda进行一些润滑。

所有的想法都表示赞赏,谢谢。

2 个答案:

答案 0 :(得分:3)

只需从Reverse开始,然后转到值为0(TakeWhile)并抓住最后一项(Select)的键(LastOrDefault

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

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

答案 1 :(得分:0)

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