如何在Ruby中获取特定数量的输入行?
我在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
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编程:我在考虑问题的“获取特定行数”部分,只是从以前的答案中复制了这部分代码。