Ruby 用冒号对数字排序
我有一个圣经经文、时间或其他带有数字和冒号的字符串的列表。我希望这些分类如下:Ruby 用冒号对数字排序,ruby,sorting,Ruby,Sorting,我有一个圣经经文、时间或其他带有数字和冒号的字符串的列表。我希望这些分类如下: 1:5 2:1 2:8 2:14 11:36 我该如何对这些数字进行排序 我假设我必须解析字符串,在冒号上分隔,然后排序。我所尝试的是这样的: 1:5 11:36 2:1 2:14 2:8 使用 map(&:to_i)部分是从字符串中生成整数所必需的,因为11>2但是“11” 看,还有。后者是标准Ruby库的一部分。两个小建议:在给出示例时,将所有输入表示为Ruby对象。这里是[“1:5”、“11:36”、“2:
1:5
2:1
2:8
2:14
11:36
我该如何对这些数字进行排序
我假设我必须解析字符串,在冒号上分隔,然后排序。我所尝试的是这样的:
1:5
11:36
2:1
2:14
2:8
使用
map(&:to_i)
部分是从字符串中生成整数所必需的,因为11>2
但是“11”
看,还有。后者是标准Ruby库的一部分。两个小建议:在给出示例时,将所有输入表示为Ruby对象。这里是
[“1:5”、“11:36”、“2:1”、“2:14”、“2:8”]
。当输入不是有效的Ruby对象时,问题被否决的情况并不少见。其次,将变量附加到这些对象中的每一个对象是很有帮助的:arr=[“1:5”、“11:36”、“2:1”、“2:14”、“2:8”]
。这样,我们就可以在答案和评论中引用这些变量,而无需定义它们。按照我的建议表达输入有一个副作用,即允许读者在准备答案时剪切和粘贴。@CarySwoveland感谢您的建议。你完全正确。:)@如果你这么认为,你应该编辑你的问题并按照建议去做。
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"]
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"]