2015-08-21 30 views
-1

.NET Framework 4.6。Lambda Expression根據C#中的值查找頂部/底部鍵?

鑑於這種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。

所有的想法表示感謝,謝謝。

回答

3

只需啓動在與Reverse結束然後去而值爲0(TakeWhile)並獲取最後一個項目(LastOrDefault)的鍵(Select)。

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

順便說一下,這稱爲Linq,不是lambda,儘管lambda作爲Linq的一部分。

+0

我不想要一個香草Linq查詢表達式,我想要一個您提供的Lambda表達式。謝謝!我明白不同,這就是爲什麼我問我要求什麼。 – Snowy

+0

@Snowy好吧,這叫做方法語法vs查詢語法,我猜是你在說什麼。 – juharr

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

對於類似於{1,0},{2,2},{3,0},{4,5},{5,0}的內容,因爲它會選擇3而不是5而不起作用。 – juharr

+0

@ juharr yep,我錯過了關於「在最後一個非零值鍵之後」的部分。 – kmc059000