删除不遵循数组格式的版本

时间:2014-10-03 14:02:07

标签: ruby arrays gem

我有一个已分类的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个对象显然不遵循版本控制格式,它们只是作为一个例子。有没有办法可以将它们从阵列中删除?

我实际上想要最新的标记版本,我对所有标记版本的列表进行排序,然后获取最后一个版本。是否有宝石或其他方式来获得最新的标记版本的回购?

1 个答案:

答案 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"