【问题标题】:How to convert STDIN contents to an array?如何将 STDIN 内容转换为数组?
【发布时间】:2010-10-07 14:24:42
【问题描述】:

我有一个文件 INPUT,其中包含以下内容:

123\n
456\n
789

我想像这样运行我的脚本:script.rb

myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size

我希望这会打印 3,但我得到了 15。我在这里真的很困惑。有什么指点吗?

【问题讨论】:

  • 嘿嘿。第三行实际上说 puts myArray.size。问题中的错字,而不是代码。
  • @Mike:所以编辑问题...

标签: ruby arrays stdin


【解决方案1】:

STDIN.lines 是惰性的,但为您提供了一个类似数组的结构来传递和迭代。

【讨论】:

    【解决方案2】:

    你想要

    myArray = $stdin.readlines
    

    这会将所有 $stdin 放入一个数组中,每行输入一个数组条目。

    请注意,对于大型输入文件,这非常低效(在内存方面),因此您最好使用以下内容:

    $stdin.each_line do |l|
      ...
    end
    

    而不是

    a = $stdin.readlines
    a.each do |l|
      ...
    end
    

    因为前者不会预先为所有内容分配内存。尝试以第二种方式处理数 GB 的日志文件,以查看系统的交换性能有多好...

    【讨论】:

      【解决方案3】:

      您所追求的是使用 $stdin 而不是 $stdin.to_s

      ruby -e 'p $stdin.readlines.size' < INPUT
      3
      
      ruby -e 'p $stdin.to_s'
      "#<IO:0x7fc7cc578af0>"
      

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 2020-01-30
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2017-03-15
        • 2016-11-11
        • 1970-01-01
        相关资源
        最近更新 更多