如何在Ruby中对数字排序?命令行传参场景排障
问题:如何正确实现数字排序?
我尝试通过以下命令行参数传递数字并在终端打印排序后的结果,使用的命令为:
$ echo "7 3 1 5 11" | ruby sort.rb
我编写了如下示例代码:
sort_no = gets.chomp() array = [] a = array.push(sort_no) b = a.sort(&:to_i) puts "#{b}"
但输出结果为:
["7 3 1 5 11"]
请问如何实现正确的数字排序?
解答
嘿,我来帮你捋捋问题出在哪~
你当前代码的核心问题是:gets.chomp()读取到的是一整个带空格的字符串"7 3 1 5 11",你直接把它塞进数组里,导致数组里只有一个元素。后续的sort(&:to_i)其实是在对这个单一元素的数组排序,自然不会有任何变化,输出就是原字符串组成的数组。
要实现正确的数字排序,你需要完成这几个关键步骤:
- 将输入的整行字符串按空格拆分成独立的数字字符串
- 把每个字符串转换成整数(这样才能按数值大小排序,而不是字符串字典序)
- 对整数数组进行排序
- 输出排序后的结果
下面是修正后的代码:
# 读取输入并去除首尾空白字符 input_line = gets.chomp # 按空格分割字符串,得到单个数字字符串的数组,再转成整数数组 number_array = input_line.split.map(&:to_i) # 对整数数组进行升序排序(Ruby的sort默认就是升序) sorted_numbers = number_array.sort # 如果你想输出空格分隔的一行结果,用join;如果想每行一个数字,直接puts sorted_numbers即可 puts sorted_numbers.join(' ')
现在运行你原来的命令:
$ echo "7 3 1 5 11" | ruby sort.rb
输出会是:
1 3 5 7 11
如果直接用puts sorted_numbers,输出会是每行一个数字:
1 3 5 7 11
你可以根据需求选择输出格式~
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

