用冒号排序数字

rya*_*ts1 3 ruby sorting

我有一份圣经经文,时间或其他一些数字和冒号字符串.我希望那些分类到这个:

1:5
2:1
2:8
2:14
11:36
Run Code Online (Sandbox Code Playgroud)

我该如何排序这些数字?

我假设我必须解析字符串,在冒号上分开,然后排序.我试过的东西给了我这样的东西:

1:5
11:36
2:1
2:14
2:8
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 9

使用 Enumerable#sort_by

input = %w|1:5 11:36 2:1 2:14 2:8|
input.sort_by { |e| e.split(':').map(&:to_i) }
#? ["1:5", "2:1", "2:8", "2:14", "11:36"]
Run Code Online (Sandbox Code Playgroud)

map(&:to_i)需要部分来使字符串整数,因为11 > 2但是"11" < "2".


Car*_*and 6

arr = %w| 1:5 11:36 2:1 2:14 2:8 |
  #=> ["1:5", "11:36", "2:1", "2:14", "2:8"]

arr.sort_by { |s| Gem::Version.new(s.tr(':', '.')) }
  #=> ["1:5", "2:1", "2:8", "2:14", "11:36"]
Run Code Online (Sandbox Code Playgroud)

请参阅Enumerable#sort_by,String#trGem :: Version :: new.后者是标准Ruby库的一部分.