2014-03-19 1 views
1

두 개의 사전이 있습니다. 나는 지정된 시간 값을 저장하고있다. 이제는 좀 더 세부적으로 다루고 싶습니다. 두 사전 모두 같은 달과 년을 가졌는지 비교하고 싶습니다. 일과 무관합니다. 내가 어떻게 그럴 수 있겠 어. 당신은 연도와 월이 사전에이 있는지 확인하려면DateTime 키가있는 사전 두 개가 같은 날짜를 공유하는지 확인하십시오.

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를 사용할 수 있습니다 :

+10

지금까지 시도해 보셨나요? – bit

답변

2

당신은 키의 교차점을 찾을 수 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

변환하여 그 안에에만 연도와 월 지키는 StringDateTime :

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 
     } 
관련 문제