Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 - Fatal编程技术网

如何在Ruby中获取特定数量的输入行?

如何在Ruby中获取特定数量的输入行?,ruby,Ruby,我在Ruby中输入如下内容: lines = STDIN.readlines.map{|x| x.strip.to_i}.sort num_lines = STDIN.readline.strip.to_i lines = [] num_lines.times do lines << STDIN.readline.strip.to_i end lines.sort 这将从命令提示符获取输入,但我希望获取特定次数的输入。假设我的测试用例数是3,在输入3行之后如何停止它 line

我在Ruby中输入如下内容:

lines = STDIN.readlines.map{|x| x.strip.to_i}.sort
num_lines = STDIN.readline.strip.to_i
lines = []
num_lines.times do
  lines << STDIN.readline.strip.to_i
end
lines.sort
这将从命令提示符获取输入,但我希望获取特定次数的输入。假设我的测试用例数是3,在输入3行之后如何停止它

lines = []
3.times do
  lines << STDIN.readline.strip.to_i
end
lines.sort
编辑: 如果您想让它接受任意数量的输入,您有两个选项:最简单的是首先输入您有多少行输入,如下所示:

lines = STDIN.readlines.map{|x| x.strip.to_i}.sort
num_lines = STDIN.readline.strip.to_i
lines = []
num_lines.times do
  lines << STDIN.readline.strip.to_i
end
lines.sort
或者,如果您不知道预期的行数,您必须有某种方式来表示数据是完整的。例如,如果希望有一个空行表示数据的结尾:

lines = []
STDIN.each_line do |line|
  line.strip!
  break if line == ''
  lines << line.to_i
end
lines.sort
顺便说一下,当程序在等待输入时暂停时,这不是无限循环。它正在阻塞或只是等待输入。

一行代码

这将只取您想要使用的行数-所需的计数在变量@requested\u count中:

lines = STDIN.readlines.values_at(0..@requested_count - 1).map{|x| x.strip.to_i}.sort

与先前答案不同的是:

lines = []
1.upto(3) do
  lines << STDIN.readline.strip.to_i
end
puts lines.sort
为什么不使用它呢


它仍然是无限循环的。。对不起,没有,我刚测试过。也许你没有正确使用“无限循环”这个短语?也许他的意思是,如果用户只输入两行或更少的输入,而不是从管道输入,那么这将是无限循环,不是吗?我只是把脸撞到桌子上。我感到难以置信的头晕,我肯定我失去了一些脑细胞。恐怕我还是不能同意你对无限循环的定义。Cargo cult编程:我在考虑问题的“获取特定行数”部分,只是从以前的答案中复制了这部分代码。