gpt4 book ai didi

ruby - Ruby 如何比较语义版本字符串?

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:13 24 4
gpt4 key购买 nike

在比较 Ruby 字符串时,我注意到一些意想不到的行为。我将在下面写:

2.3.1 :011 >   '5.6' >= '5.5'
=> true
2.3.1 :012 > '5.6' >= '5.7'
=> false
2.3.1 :013 > '5.6' >= '5.6.1'
=> false
2.3.1 :014 > '5.6' <= '5.6.1'
=> true
2.3.1 :016 > '4.6.1' <= '5.6'
=> true
2.3.1 :017 > '4.6.1' >= '5.6'
=> false

我在网上的几个地方看到人们正在使用 Gem::Version.new() 来比较语义版本。不过,这不是我的问题。任何人都可以向我解释 Ruby 似乎如何能够在没有任何库的帮助下比较语义版本字符串吗?当我用数字比较运算符比较两个字符串时会发生什么?

从上面的测试我想我可以确认它不是简单地比较每个字符串的第一个/最后一个字符的 ascii 值。它也没有使用字符串长度作为主要比较,这是我所期望的。

最佳答案

它检查字符串中每个单独字符的序数。它会在同一索引第一次出现不匹配时停止。序号越高,字符“越大”。基本上,它类似于:

first_string.chars.map(&:ord) >= second_string.chars.map(&:ord)

正如评论中所指出的,这不会导致自然排序,因此人们使用 Gem::Version 的原因:

'11' > '9' # => false

关于ruby - Ruby 如何比较语义版本字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com