首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重组综合框架

重组综合框架
EN

Stack Overflow用户
提问于 2022-04-09 12:56:10
回答 2查看 89关注 0票数 1

你能帮我重新整理这段代码吗?cLion提出了对第一个荣誉的警告,如果Clang:在条件链中重复分支,我不明白为什么。我试着比较两个日历日期,以稍后设置最大日期和最小日期。(d-天,m-山和y-年)。

代码语言:javascript
运行
复制
if (d1.y < d2.y) {
    return -1;
} else if (d1.y == d2.y && d1.m < d2.m) {
    return -1;
} else if (d1.y == d2.y) {
    if (d1.m == d2.m) {
        if (d1.d < d2.d) {
            return -1;
        }
    }
} else {
    return 1;
}
return 0;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-09 19:21:16

编写这段代码有很多种方法。这里有一个试图清楚地显示比较的方法:

代码语言:javascript
运行
复制
//  If years differ, return comparison based on that.
if      (d1.y < d2.y)
    return -1;
else if (d1.y > d2.y)
    return +1;

//  Otherwise, if months differ, return comparison based on that.
else if (d1.m < d2.m)
    return -1;
else if (d1.m > d2.m)
    return +1;

//  Otherwise, if days differ, return comparison based on that.
else if (d1.d < d2.d)
    return -1;
else if (d1.d > d2.d)
    return +1;

//  Otherwise, all components are equal, so return equality.
else
    return  0;
票数 3
EN

Stack Overflow用户

发布于 2022-04-09 19:39:36

如果我不得不猜测,您的yy对象就是“日期”。因此,成员,y (年份),m (月)和d (日)。您的比较逻辑似乎测试d1是否比d2晚。我猜是一种类似qsort的例行公事。

因此,快速转换为整数可能会更干净。

代码语言:javascript
运行
复制
long date1 = (d1.y << 16) | (d1.m << 8) | (d1.d);
long date2 = (d2.y << 16) | (d2.m << 8) | (d2.d);

然后你可以像这样测试:

代码语言:javascript
运行
复制
if (date1 == date2) return 0;
if (date1 > date2) return 1;
return -1;

但等着吧..。您甚至可以通过返回一个混合代数和布尔语句来避免这样的if语句:

代码语言:javascript
运行
复制
return (date1 > date2)*1 + (date1 < date2) * (-1);

但是,如果这是一个类似于q排序的比较函数,您可以为d1>d2返回大于0的任何内容,对于d1<d2返回小于零的任何内容,那么您可以简单地这样说:

代码语言:javascript
运行
复制
return date1-date2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71808270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档