如何订购代表软件版本的字符串数组?

时间:2017-06-29 15:11:14

标签: ruby sorting

我有一个像这样的无序数组

semver

需要获得订购版本(以获取最新版本)。我想过使用semver库来比较它们,但是这些不遵循example.label <- c("A","B") example.percent.good <- c(.75,.6) example.data <- data.frame(example.label,example.percent.good) example.data$example.percent.bad <- (1-example.data$example.percent.good) example.data ##looks like this example.label example.percent.good example.percent.bad 1 A 0.75 0.25 2 B 0.60 0.40 约定,所以我不知道它是什么方法来实现我想要的。

更新

版本字符串不是特定于Ruby的,我可以从Github上可以找到的所有语言接收输入版本

2 个答案:

答案 0 :(得分:4)

有人可能会使用Gem::Version

versions.sort_by(&Gem::Version.method(:new))
#⇒ ["1.0", "1.1.2", "1.1.3", "1.2", "1.3", "1.3.1",
#   "1.4", "1.4.1", "1.4.1.1", "1.4.1.2", "1.5",
#   "1.6", "1.6.1", "1.6.2", "1.6.3", "1.7", "1.7.1",
#   "1.8", "1.9", "1.10", "1.11", "1.11.1", "1.11.2"]

答案 1 :(得分:2)

像你这样的数组,即由点分隔的数字组成的字符串,可以通过以下方式进行排序:

a.sort_by { |s| s.split('.').map(&:to_i) }
#=> [
# "1.0",
# "1.1.2",
# "1.1.3",
# "1.2",
# "1.3",
# "1.3.1",
# "1.4",
# "1.4.1",
# "1.4.1.1",
# "1.4.1.2",
# "1.5",
# "1.6",
# "1.6.1",
# "1.6.2",
# "1.6.3",
# "1.7",
# "1.7.1",
# "1.8",
# "1.9",
# "1.10",
# "1.11",
# "1.11.1",
# "1.11.2"
# ]

split('.')分隔字符串:

'1.4.1.1'.split('.')
#=> ["1", "4", "1", "1"]

map(&:to_i)map { |e| e.to_i }的快捷方式,它将每个元素转换为整数:

["1", "4", "1", "1"].map(&:to_i)
#=> [1, 4, 1, 1]

Enumerable#sort_by然后使用这些数组对相应的字符串进行排序。