我创建了一个带有不同时间戳和日期的表。时间和日期的结构如下:
typedef struct structTimeDate
{
int seconds;
int minutes;
int hours;
int day;
int month;
int year;
} TimeDate;
表的每一行都有一个TimeDate
。我想要实现的是从表中找到最少的TimeDate
,这意味着日期和时间最早的那个。我曾考虑过对表进行迭代并编写if
和else if
来实现它,但是它看起来很复杂且容易出错。
是否存在任何有助于实现我的目标的算法?我不是要找人来给我写代码。我想要一个适合我需求的起点或任何算法。 预先感谢。
答案 0 :(得分:2)
// at this level test is infered as with or without lineData
const test= akpiDTOtoAkpiData({
id: 1,
name: 'my name',
startDate: '2019',
periodData: [] as PeriodDto[],
});
if ('lineData' in test) {
// here test is precisely the type with lineData
}
还不错。
if then else
替代方法:
如果只需要比较订单并且成员在主要范围内,则创建一个人造整数时间戳记。
if (x.year < y.year) return -1;
if (x.year > y.year) return 1;
if (x.month < y.month) return -1;
if (x.month > y.month) return 1;
...
if (x.sec < y.sec) return -1;
if (x.sec > y.sec) return 1;
return 0;
然后只需比较时间戳的整数值即可找到最大值。
需要额外的工作来支持负数年份。
使用2的幂次方常数会产生较小的效率。
// Think of date as base 13, 32, 24, 60, 60
long long ts = ((((x.year*13LL + x.month)*32 + x.day)*24 + x.hour)*60 + x.min)*60 + x.sec;