2016-08-17 68 views
2

所以我有一個在列表<字典<字符串,字符串>>其中字典值是日期爲字符串選擇最小密鑰值對

IEnumerable<Dictionary<string,string>> 

使用

var differences = activeCalls.Where(l1 => !tempActiveCalls.Any(l2 => l1 == l2)); 

,其保持得到身份證作爲關鍵和格式化爲日期

DateTime.ToString("s") 

我想要的是獲取具有最早日期的鍵值對。 現在我使用

List<Dictionary<string, DateTime>> minDate = new List<Dictionary<string, DateTime>>(); 
//convert strings to dates 
foreach(var dictionary in differences) 
{ 
    foreach(var kvp in dictionary) 
    { 
     minDate.Add(new Dictionary<string, DateTime>() 
     { 
      {kvp.Key, DateTime.ParseExact(kvp.Value,"yyyy'-'MM'-'dd'T'HH':'mm':'ss",null) } 
     }); 
    } 
} 

到字符串轉換成datetime格但我被困在如何選擇基於日期最小鍵/值對。我也不認爲這是最簡單的方法。任何幫助表示讚賞。

+0

我沒有關注。您希望在任何字典中的鍵值對的1個實例中,該鍵在所有字典中的所有其他鍵上的值最小? – Igor

+0

@Igor是的,這是正確的。 – Resistance

回答

2

這裏有一種方法來做到這一點,按鍵排序並獲得第一個元素。這是因爲密鑰在字典實例中的結構方式,DateTime.ToString("s")產生可排序的日期時間字符串(ISO表示法),因此不需要將其轉換爲DateTime類型。 SelectMany將字典實例平鋪爲一個集合。使用OrderBy將按順序升序(從最早到最晚)。

var result = differences.SelectMany(y => y).OrderBy(x => x.Key).First(); 

您將需要包括using System.Linq;在你的代碼文件的頂部。

+1

哇,這太簡單了,相比我的搞砸方法!我應該從ToString(「s」)被稱爲可排序格式的事實中得到一些線索......謝謝! – Resistance

相關問題