Ruby 如何将STDIN内容转换为数组?
我有一个包含以下内容的文件输入:Ruby 如何将STDIN内容转换为数组?,ruby,arrays,stdin,Ruby,Arrays,Stdin,我有一个包含以下内容的文件输入: 123\n 456\n 789 我希望像这样运行脚本:script.rb
123\n
456\n
789
我希望像这样运行脚本:script.rb
myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size
我希望这能打印3张,但我得到15张。我真的很困惑。有什么指针吗?您要的是使用$stdin
而不是$stdin.to\u
ruby -e 'p $stdin.readlines.size' < INPUT
3
ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"
ruby-e'p$stdin.readlines.size'
您想要什么
myArray = $stdin.readlines
这将把所有$stdin放入一个数组中,每行输入一个数组条目
请注意,对于大型输入文件,这是非常低效的(内存方面的),因此您最好使用以下内容:
$stdin.each_line do |l|
...
end
而不是
a = $stdin.readlines
a.each do |l|
...
end
因为前者并不预先为所有内容分配内存。试着用第二种方法处理一个千兆字节的日志文件,看看你的系统的交换性能有多好 STDIN.lines是惰性的,但它提供了一个类似数组的结构来传递和迭代。。第三行实际上是puts myArray.size。在问题中输入错误,而不是代码。@Mike:所以编辑问题。。。