一个关于算法的的问题,帮帮忙哈

chengbo0110123 2008-12-01 10:02:01
有一个类似键值对的对象,通过它可以得到时间和数据值
但该对象又存在于一个集合中,这个集合有很多这样的对象,
现在的问题是要通过这个集合对象,找出指定时间段(如2分钟)内的键值对象
比如:
foreach(Item item in Items)
{
DateTime=item.LocalDate; //可以得到时间
DataValue=item.Value; //可以得到数据
..//?如何在每隔两分钟取得这个item对象并放到另一个Items集合中,
如果时间不均匀,需要取得在离上一个item两分钟内最近的一个
}

其实这个问题可以归结为在一个递增的数列中(如:1,2,3,4,5,7,9..相当于时间递增),从第一个数开始,去掉第一个数和(第一个数+2)中间的数据,然后再从(第一个数+2)的数开始进行如此计算,如果(第一个数+2)在数列中没有相应的数据,则取最接近的数值!!
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengbo0110123 2008-12-04
  • 打赏
  • 举报
回复
好久没看这个贴了,不过还是很谢谢你的回答!!
lijunfeng 2008-12-01
  • 打赏
  • 举报
回复
你归结的内容和你上面写的要求好像有点不一致,我按你上面写的要求来的.(找出指定时间段(如2分钟)内的键值对象)
假设你的集合内数据是按LocalDate升序的

Item itemBase = 基准Item;
int intBaseIndex = 基准Item的所在位置;
Item itemResult = null; // 结果Item
int intDiffMinutes = 2; // 间隔分钟数

for(int i = intBaseIndex + 1; i < Items.Count; i++)
{
if(Items[i].LocalDate.Subtract(itemBase.LocalDate).TotalMinutes <= intDiffMinutes)
{
// 在2分钟内找到值就保存到itemResult
itemResult = Items[i];
}
else
{
// 超过2分钟就退出循环
break;
}
}
if(itemResult == null)
{
// 没找到
}
else
{
// itemResult即是找到的最近的一个对象
}

我没有测试,大致思路就是这样

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧