Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典的日期-时间键不相同_C# - Fatal编程技术网

C# 字典的日期-时间键不相同

C# 字典的日期-时间键不相同,c#,C#,我有一本字典>类型的字典 需要在字典上执行一个独特的操作,结果它包含唯一的月-年组合的值忽略日期 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 您可以从年、月和组中创建日期: IEnumerable<IGrouping<DateTime, double>> grouped = d

我有一本
字典>
类型的字典

需要在字典上执行一个独特的操作,结果它包含唯一的月-年组合的值忽略日期

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

您可以从年、月和组中创建日期:

IEnumerable<IGrouping<DateTime, double>> grouped =
  dict.GroupBy(d => new DateTime(d.Key.Year, d.Key.Month, 1), d => d.Value);
IEnumerable分组=
dict.GroupBy(d=>newdatetime(d.Key.Year,d.Key.Month,1),d=>d.Value);
现在,您有了一个集合,其中每个“年-月”值都有一个或多个
double
值。您只需决定如何处理多个值。

您可以尝试以下方法:

     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();
    }
}
var dates=new Dictionary(){
{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(new DateEqualityComparer());
foreach(日期中的变量项){
日期时间键=新的日期时间(item.key.Year,item.key.Month,1);
唯一日期[键]=项值;
}
类DateEqualityComparer:IEqualityComparer
{
公共布尔等于(日期时间值1,日期时间值2)
{
如果(value1.Month==value2.Month&&value1.Year==value2.Year)返回true;
返回false;
}
public int GetHashCode(日期时间值)
{
int hash=value.Month^ value.Year;
返回hash.GetHashCode();
}
}

您试图做些什么来解决这个问题?您在尝试解决方案时遇到了什么问题?我有一个简单的for循环和一个条目表来维护找到的组合和值。寻找一个更好更干净的方法。可能是linq什么的。你有有效的解决方案吗?在这种情况下,“代码审查”对您来说可能是一个更好的站点。