C# List 儲存每小時的統計數值,如果該小時沒有資料,則需新增資料

weixin_44220506 2021-03-24 05:10:52
大家好,

我有一個Alist,用來存放Info Class。


public class Info
{
public int data {get;set;}
public DateTime startTime{get;set;} //例如: 2021-03-24 10:00:00
public DateTime endTime{get;set;} //例如: 2021-03-24 11:00:00
}


假設AList需要存放2日(不一定是剛好凌晨12點開始)每小時的數據,共計48個元素,就算數值是0也需要記錄。
現在已有一個BList存有這2日內中約4筆的數據,這4筆數據是有效的(非0數據),
希望將BList的數據存放至AList內。

目前想到的做法是…

			

//1.先建立出AList的所有數據,數據皆為0
DateTime startTime = DateTime.Parse("2020/07/07 00:00:01");//开始时间
DateTime endTime = DateTime.Parse("2020/07/09 00:00:00");//结束时间
List<Info> AList = new List<Info>();//存储所有时间段内的整点时间
double hours = int.Parse(Math.Floor((endTime - startTime).TotalHours).ToString());//计算时间段内的小时
int hourBegin = startTime.Hour;//开始时间的小时
string daybegin = startTime.Date.ToString();//开始时间日期
DateTime hourTimeBegin = DateTime.Parse(daybegin + ' ' + hourBegin + ':' + "00" + ':' +"00");//转换成开始时间所在的小时
if (hours > 1)//判断时间段内是否小时数大于1
{
for (int i = 1; i <= hours; i++)
{
Info info = new Info();
info.data = 0;
info.startTime = hourTimeBegin.AddHours(i);

AList.Add(info);
}

//2.再一一比對BList

for (int i = 0; i < AList.Count; i++)
{
for ( int j = 0; j < BList.Count; j++)
{
if(DateTime.Compare(AList[i].startTime, BList[j].startTime)
{
AList[i].data = BList[j].data;
}
}
}
}



覺得雙迴圈時間複雜度太高了…
不曉得是否還有更快的作法呢?
懇請板上先進指導,謝謝^^


...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44220506 2021-03-24
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
假设你的软件从来就不重启
你可以自行百度“C# 缓存依赖”设置绝对过期时间为48小时,过期后他自己逐出

如果你的软件需要重启,请自己百度“redis’等专用缓存件


wanghui0380您好,其實BList的數據是從數據庫取出的,所以沒有要用到redis那些,只是要單純的演算法處理數據。
wanghui0380 2021-03-24
  • 打赏
  • 举报
回复
假设你的软件从来就不重启 你可以自行百度“C# 缓存依赖”设置绝对过期时间为48小时,过期后他自己逐出 如果你的软件需要重启,请自己百度“redis’等专用缓存件

110,533

社区成员

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

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

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