版本比较器:自己写或者使用hutool的包

项目中存在版本的比较:
比如:V3.23.09之前版本走一个逻辑,之后走另外的一个逻辑

    fun compareVersions(version1: String, version2: String): Int {
        val version1Parts = version1.split(".")
        val version2Parts = version2.split(".")

        val minLength = minOf(version1Parts.size, version2Parts.size)

        for (i in 0 until minLength) {
            val part1 = version1Parts[i].toInt()
            val part2 = version2Parts[i].toInt()

            if (part1 < part2) {
                return -1 // version1 < version2
            } else if (part1 > part2) {
                return 1 // version1 > version2
            }
        }

        return version1Parts.size.compareTo(version2Parts.size)
    }

或者使用hutool的VersionComparator

VersionComparator.INSTANCE.compare(version,targetVersion) > 0

比较的时候是按照字符比较的

class SendServiceTest : FunSpec({

	test("VersionComparator") {
		val targetVersion="V3.23.09"
		VersionComparator.INSTANCE.compare("V3.21.03",targetVersion) shouldBe -2
		VersionComparator.INSTANCE.compare("V3.22.03",targetVersion) shouldBe -1
		VersionComparator.INSTANCE.compare("V3.22.03.01",targetVersion) shouldBe -1
		VersionComparator.INSTANCE.compare("V3.23.06",targetVersion) shouldBe -3
		VersionComparator.INSTANCE.compare("V3.23.09",targetVersion) shouldBe 0
		VersionComparator.INSTANCE.compare("V3.23.09.01",targetVersion) shouldBe 1
		VersionComparator.INSTANCE.compare("V3.23.02",targetVersion) shouldBe -7
		VersionComparator.INSTANCE.compare("V3.23.12",targetVersion) shouldBe 1
	}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
std::set 是 C++ STL 中的一个容器,用于存储一组不重复的元素,且元素按照一定的顺序排列。在默认情况下,std::set 会按照元素的大小进行升序排列。如果我们需要按照自己的规则进行排序,就需要使用比较器比较器是一个函数对象,它定义了两个元素之间的比较规则。在 std::set 中,比较器可以通过模板参数指定。比较器有两种形式: 1. 函数指针形式: ```c++ bool (*comp)(const T& a, const T& b); ``` 2. 函数对象形式: ```c++ class Compare { public: bool operator()(const T& a, const T& b); }; ``` 其中,T 是元素类型。 下面是使用比较器对 std::set 进行排序的示例: ```c++ #include <iostream> #include <set> using namespace std; class Person { public: string name; int age; Person(string name, int age) : name(name), age(age) {} bool operator<(const Person& rhs) const { return age < rhs.age; } }; class Compare { public: bool operator()(const Person& a, const Person& b) const { return a.name < b.name; } }; int main() { std::set<Person, Compare> persons; persons.insert(Person("Tom", 20)); persons.insert(Person("Jerry", 18)); persons.insert(Person("Mike", 25)); for (const auto& person : persons) { cout << person.name << " " << person.age << endl; } return 0; } ``` 在这个示例中,我们定义了一个 Person 类,其中定义了一个小于运算符 operator<,用于比较两个 Person 对象的年龄大小。我们还定义了一个 Compare 类,其中定义了一个小于运算符 operator(),用于比较两个 Person 对象的名字。在 main 函数中,我们使用 std::set<Person, Compare> 定义了一个 persons 容器,其中指定了 Compare 作为比较器。在插入元素时,std::set 会根据 Compare 定义的规则进行排序。结果输出如下: ``` Jerry 18 Mike 25 Tom 20 ``` 可以看到,std::set 按照 Compare 定义的规则对元素进行了排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值