大家好,
我有一個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;
}
}
}
}
覺得雙迴圈時間複雜度太高了…
不曉得是否還有更快的作法呢?
懇請板上先進指導,謝謝^^
uj5u.com熱心網友回復:
假設你的軟體從來就不重啟你可以自行百度“C# 快取依賴”設定絕對過期時間為48小時,過期后他自己逐出
如果你的軟體需要重啟,請自己百度“redis’等專用快取件
uj5u.com熱心網友回復:
wanghui0380您好,其實BList的數據是從數據庫取出的,所以沒有要用到redis那些,只是要單純的演演算法處理數據。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/269626.html
標籤:C#
上一篇:C#.NET串口發資料問題
