c - 找到最小时间和日期戳的有效方法是什么?
问题描述
我创建了一个具有不同时间戳和日期的表。时间和日期的结构如下:
typedef struct structTimeDate
{
int seconds;
int minutes;
int hours;
int day;
int month;
int year;
} TimeDate;
表格的每一行都有一个TimeDate
. 我想要实现的是TimeDate
从表中找到最少的,即日期和时间最早的表。我想过迭代表格并编写if
并else if
实现它,但它似乎很复杂且容易出错。
是否有任何现有的算法可以帮助实现我的目标?我不是在找人给我写代码。我想要一个适合我要求的起点或任何算法。提前致谢。
解决方案
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;
替代:
如果只需要比较顺序并且成员在主要范围内,请创建一个人工整数时间戳。
// 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;
然后简单地比较时间戳的整数值以找到最大的。
支持负数年需要额外的工作。
使用 2 的幂常数可以获得较小的效率。
long long ts = ((((x.year*16LL + x.month)*32 + x.day)*32 + x.hour)*64 + x.min)*64 + x.sec;
推荐阅读
- spring-boot - BeanCreationException:创建名为“springSecurityFilterChain”的 bean 时出错
- apache-spark - 是否有任何可以调整的 spark 配置参数以减少驱动程序节点的内存消耗?
- mysql - 带有 SUM 的 LEFT JOIN 不返回正确的值
- javascript - 使用回调功能的 Python 过滤方法
- web-services - 使用Mule Web服务Consumer连接器时弹出这个错误是什么意思,"The SOAP request timed out"
- rust - 如何比较 Arc
反对T? - apache - Apache Web 服务器已停止
- python - 创建具有前导零和不同起点和终点的数组的 numpy 数组
- android - 单次 Apollo Rx 查询
- python - 为什么使用 dask 时使用 zarr 的性能比 parquet 好得多?