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:所以编辑问题。。。