2014-03-19 58 views

回答

2

您可以嘗試的LINQ找到按鍵的交集:

Boolean hasSameKeys = 
    (dict1.Keys.Select(x => new DateTime(x.Year, x.Month, 1)).Intersect(
    dict2.Keys.Select(x => new DateTime(x.Year, x.Month, 1)))).Any(); 

如果你想檢查是否有年份和月份在字典中,你可以再次使用Linq:

int month = 3; // <- Month of interest 
    int year = 2014; // <- Year of interest 
    Boolean hasKeys = dict1.Keys.Where(x => (x.Year == year) && (x.Month == month)).Any(); 

如果您想要彙總您的數據,例如總結值內每個月

Dictionary<DateTime, int> oldDict = new Dictionary<DateTime, int>() { 
    {new DateTime(1999, 1, 25), 1}, 
    {new DateTime(1999, 2, 25), 2}, // <- These values should be added up 
    {new DateTime(1999, 2, 27), 3}, // <- These values should be added up 
    {new DateTime(1999, 3, 25), 4}, 
    {new DateTime(1999, 4, 25), 5}, 
    }; 

    Dictionary<DateTime, int> aggregatedDict = 
    oldDict.GroupBy(pair => new DateTime(pair.Key.Year, pair.Key.Month, 1), 
        pair => pair.Value) 
      .ToDictionary(x => x.Key, 
         x => x.Aggregate(0, (sum, item) => sum + item)); 
+0

如果我想檢查字典中是否存在某個月份,那該怎麼辦?如果是這樣更新數據。否則將日期添加到字典中? – user3305453

+0

@ user3305453:你可以在字典鍵上使用Linq,看看我的編輯 –

+0

我真的需要一些更大的幫助。我有一些DateTime的數據。現在我必須按年,月,日等向用戶表示數據。所以我必須預先計算所有的值。你能幫我解決這個問題嗎? – user3305453

0

將您DateTimeString只有年份和月份保持在它:

String dateString = DateTime.Now.ToString("yyyyMM"); 

然後,所有你需要做的是一個簡單的字符串比較。

0

我幾乎更喜歡用linq。在這種情況下Linq的Any方法。

 var month = 3; 
     var year = 2014; 

     var dic1 = new Dictionary<int, DateTime>(); 
     var dic2 = new Dictionary<int, DateTime>(); 

     // fill dictionaries 

     if (dic1.Any(date => date.Value.Year == year && date.Value.Month == month) && 
      dic2.Any(date => date.Value.Year == year && date.Value.Month == month)) 
     { 
      // do something 
     } 
相關問題