首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >均衡数据字典

均衡数据字典
EN

Stack Overflow用户
提问于 2009-11-06 03:31:35
回答 2查看 274关注 0票数 0
代码语言:javascript
复制
Dictionary<DateTime, int> data1
Dictionary<DateTime, int> data2

未排序

如果data1中的日期是**1/1/2000 - 1/1/2009**,而data2中的日期是**1/1/2001 -1/1/2007*,那么两个Dictionaries<>的日期都应该是**1/1/2001 - 1/1/2007**。

可能是另一回事。

基本上,我需要删除较小范围之外的条目,如何使用c#和linq完成这一任务?

EN

回答 2

Stack Overflow用户

发布于 2009-11-06 03:44:09

代码语言:javascript
复制
DateTime min1 = data1.Keys.Min();
DateTime min2 = data2.Keys.Min();
DateTime max1 = data1.Keys.Max();
DateTime max2 = data1.Keys.Max();
if(min1 < min2 && max1 > max2) {
    data1 = ShrinkDictionary(data1, min2, max2);
}
else if(min2 < min1 && max2 > max1) {
    data2 = ShrinkDictionary(data2, min1, max1);
}
else {
    // this should never happen
    throw new Exception();
}

这里的ShrinkDictionary是:

代码语言:javascript
复制
public Dictionary<DateTime, int> ShrinkDictionary(
    Dictionary<DateTime, int> dict, DateTime min, DateTime max) {
    return dict.Where(kvp => InRange(kvp.Key, min, max))
               .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}

InRange是一种易于推广的方法:

代码语言:javascript
复制
public bool InRange(DateTime date, DateTime min, DateTime max) {
    return (date >= min) && (date <= max);
}
票数 1
EN

Stack Overflow用户

发布于 2009-11-06 03:43:09

我认为您只需要从data2中删除条目(而不是合并2个字典)。

代码语言:javascript
复制
var min = data1.Keys.Min();
var max = data1.Keys.Max();
data2 = data2
    .Where(pair => pair.Key >= min && pair.Key < max)
    .ToDictionary(pair => pair.Key, pair => pair.Value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1685244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档