You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:35:40