用冒号对数字排序

时间:2018-12-24 16:49:17

标签: ruby sorting

我有一个圣经经文,时间或带有数字和冒号的其他字符串的列表。我希望将这些分类为:

1:5
2:1
2:8
2:14
11:36

我该如何对这些数字进行排序?

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

1:5
11:36
2:1
2:14
2:8

2 个答案:

答案 0 :(得分: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"]

map(&:to_i)部分用于从字符串中生成整数,因为11 > 2"11" < "2"

答案 1 :(得分: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"]

请参见Enumerable#sort_byString#trGem::Version::new。后者是标准Ruby库的一部分。