我有一个像这样的无序数组
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上可以找到的所有语言接收输入版本
答案 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
然后使用这些数组对相应的字符串进行排序。