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什么的。你有有效的解决方案吗?在这种情况下,“代码审查”对您来说可能是一个更好的站点。