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
Ruby 用冒号对数字排序_Ruby_Sorting - Fatal编程技术网

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"]