我有一些圣经经文、时间或其他带数字和冒号的字符串列表。 我想将它们排序成这样:
1:5
2:1
2:8
2:14
11:36
如何对这些数字进行排序?
我假设我需要解析字符串,按冒号分隔,然后排序。我尝试过的方法给我类似于这样的结果:
1:5
11:36
2:1
2:14
2:8
使用 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"
。
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_by,String#tr和Gem::Version::new。后者是Ruby标准库的一部分。
["1:5", "11:36", "2:1", "2:14", "2:8"]
。如果输入不是有效的Ruby对象,则看到问题被投票降低是很常见的。其次,有助于将变量附加到这些对象上:arr = ["1:5", "11:36", "2:1", "2:14", "2:8"]
。这样,我们可以在答案和评论中引用这些变量,而无需定义它们。 - Cary Swoveland