区别于词典的日期时间键

时间:2014-02-25 21:54:10

标签: c#

我有一个Dictionary<DateTime, double>>类型的字典。

需要对字典进行区分,因此它包含唯一月份年组合的值,忽略日期。

1-May-14    -0.15
1-Apr-14    1.8
31-Mar-14   10
30-Mar-14   10

应该给出

1-May-14    -0.15
1-Apr-14    1.8
1-Mar-14    10

2 个答案:

答案 0 :(得分:1)

您可以创建年份和月份的日期并将其分组:

IEnumerable<IGrouping<DateTime, double>> grouped =
  dict.GroupBy(d => new DateTime(d.Key.Year, d.Key.Month, 1), d => d.Value);

现在您有一个集合,其中每个月的值具有一个或多个double值。您只需决定如何处理多个值。

答案 1 :(得分:0)

你可以试试这个:

     var  dates = new Dictionary<DateTime, double>(){

        {DateTime.Parse("2014-05-01"), -0.15},
        {DateTime.Parse("2014-04-1"), 1.8},
        {DateTime.Parse("2014-03-31"), 10},
        {DateTime.Parse("2014-03-30"), 10}
    };

    var uniqueDates = new Dictionary<DateTime, double>(new DateEqualityComparer());
    foreach(var item in dates) {        
        DateTime key = new DateTime(item.Key.Year, item.Key.Month, 1);      
        uniqueDates[key] = item.Value;

    }

class DateEqualityComparer : IEqualityComparer<DateTime>
{

    public bool Equals(DateTime  value1, DateTime value2)
    {
         if (value1.Month == value2.Month && value1.Year == value2.Year) return true;

         return false;
    }

    public int GetHashCode(DateTime value)
    {

        int hash = value.Month ^ value.Year;
        return hash.GetHashCode();
    }
}