我有一个已分类的my repo标记版本,如下所示:
["0.1.0", "0.2.0", "0.3.0", "0.4.0", "0.4.1", "0.5.0", "0.6.0", "0.7.0", "1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.3.0", "1.3.0-something", "1.4.0", "1.4.1", "1.4.1-some-something", "1.4.2", "1.4.2-something", "1.5.0", "1.5.1", "1.5.1-something", "1.6.0", "1.6.0-some-something", "6-01-2014-something-0.1-Release", "7-28-2014-something-0.2-Release", "something-0.2-MASTER", "something-3-TP"]
在这个数组中,最后4个对象显然不遵循版本控制格式,它们只是作为一个例子。有没有办法可以将它们从阵列中删除?
我实际上想要最新的标记版本,我对所有标记版本的列表进行排序,然后获取最后一个版本。是否有宝石或其他方式来获得最新的标记版本的回购?
答案 0 :(得分:2)
使用正则表达式和Array#keep_if
删除非版本字符串:
versions = [
"0.1.0", "0.2.0", "0.3.0", "0.4.0", "0.4.1", "0.5.0", "0.6.0", "0.7.0",
"1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.3.0", "1.3.0-something", "1.4.0",
"1.4.1", "1.4.1-some-something", "1.4.2", "1.4.2-something", "1.5.0",
"1.5.1", "1.5.1-something", "1.6.0", "1.6.0-some-something",
"6-01-2014-something-0.1-Release", "7-28-2014-something-0.2-Release",
"something-0.2-MASTER", "something-3-TP"
]
versions.keep_if { |v| v =~ /^\d+\.\d+\.\d+/ }
# => ["0.1.0",
# "0.2.0",
# "0.3.0",
# "0.4.0",
# ...
# "1.5.1-something",
# "1.6.0",
# "1.6.0-some-something"]
要仅获取上一版本,请使用Array#select
,然后Array#last
或...[-1]
:
versions.select { |v| v =~ /^\d+\.\d+\.\d+/ }.last
# => "1.6.0-some-something"