Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何排序表示软件版本的字符串数组?_Ruby_Sorting - Fatal编程技术网

Ruby 如何排序表示软件版本的字符串数组?

Ruby 如何排序表示软件版本的字符串数组?,ruby,sorting,Ruby,Sorting,我有一个像这样无序的数组 ["1.0", "1.10", "1.2", "1.6", "1.11.1", "1.3.1", "1.8", "1.11.2", "1.7.1", "1.1.3", "1.7", "1.6.1", "1.6.2", "1.9", "1.4.1", "1.4.1.1", "1.4", "1.6.3", "1.4.1.2", "1.5", "1.3", "1.11", "1.1.2"] 并且需要获取订购的版本(以获取最新版本)

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

["1.0",
 "1.10",
 "1.2",
 "1.6",
 "1.11.1",
 "1.3.1",
 "1.8",
 "1.11.2",
 "1.7.1",
 "1.1.3",
 "1.7",
 "1.6.1",
 "1.6.2",
 "1.9",
 "1.4.1",
 "1.4.1.1",
 "1.4",
 "1.6.3",
 "1.4.1.2",
 "1.5",
 "1.3",
 "1.11",
 "1.1.2"]
并且需要获取订购的版本(以获取最新版本)。我曾考虑使用
semver
库来比较它们,但它们没有遵循
semver
惯例,因此我不知道实现我想要的目标的正确方法是什么

更新

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


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

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]

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

似乎不错。。但我需要说明的是,我所说的不仅仅是ruby版本。。。也可以是PHP和其他语言。。你认为会有什么变化吗?虽然版本遵循模式
MAJOR.MINOR.BUILD.SUFFIX
惯例,但一切都会很好。不要期望这会对
“Version5”
或类似疯狂的版本进行适当排序。希望OSS repo不会采用这样的方式:DEverybody professional多年前就采用了。最后一个问题,从未见过构造
&something
,我可以在哪里读到它?
to_I
将在
上失败。rc-1
后缀排序,后者在版本中非常常见。@mudasobwa它只适用于OP示例中的数字版本。这就是为什么我说“一个像你这样的数组,即由点分隔的数字组成的字符串”是的,我明白了,我只是删除了这条评论,让它变得非常清晰。
["1", "4", "1", "1"].map(&:to_i)
#=> [1, 4, 1, 1]