0

each_char、などのイテレータメソッドはどのように実行されますかeach_linegetcなど、gets大きなファイルを読み取るためのwhileループなどの方法と比較しますか?主に、各メソッドを使用するためのオーバーヘッドはどれくらいですか、どちらがより多くのメモリを使用し、どちらがより高速になりますか?

file基本的に、100MBのテキストファイルの場合、メモリ、オーバーヘッド、および速度の点でどちらが優れていますか?

file.each_char{
|ch|
    #process ch
}

vs

ch = ""
until(file.eof?)
    ch = file.getc
    #process ch
end

または、これを行うためのさらに優れた方法はありますか?

4

1 に答える 1

0

Ruby 標準ライブラリのベンチマークパッケージを使用すると、このような質問に明確に答えることができます。

または、これを行うためのさらに良い方法はありますか?

そう思います。C プログラムは一度に 1 文字ずつファイルを処理するのが合理的かもしれませんが、Ruby には非常に多くの文字列および配列機能が組み込まれており、それらはすべて C で記述されているため、高速に実行されます。

行を単語に分割してから、いくつかの単語を使用したり、数を数えたりするのは効率的ではないように思えるかもしれませんが、その行を一度に 1 文字ずつ解析するよりもおそらくはるかに高速であり、必要に応じてより簡単に読み取ったり書き直したりできます。 .

一般に、Ruby プログラムはライブラリーを活用し、可能な限り抽象化されたオブジェクトを操作することをお勧めします。

于 2012-07-10T17:15:08.900 に答える