Ruby 初心者スレッド Part 56©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0769デフォルトの名無しさん
2015/02/19(木) 23:24:09.47ID:/rXoqLFuhttps://ideone.com/pyWQL9
実行例:
$ ruby enum-drop.rb hoge.txt
3.りんご
4.ばなな
5.パイナップル
$
28行目のメソッド Enumerable#drop(n) を利用することがポイント
http://docs.ruby-lang.org/ja/2.2.0/method/Enumerable/i/drop.html
なお Enumerable#drop はリターン値として配列(Array オブジェクト)を返すから、
入力データ(の行数)が膨大になるとメモリ効率が悪くなる
この問題は代わりに Enumerator::Lazy#drop(n) を使うと、行単位にオブジェクトが
生産/消費されるようになるから、メモリ効率を改善できる
http://docs.ruby-lang.org/ja/2.2.0/method/Enumerator=3a=3aLazy/i/drop.html
具体的には、28行目のメソッドチェーンで drop の前に lazy を挿入するだけで終わる:
....(前略).... .each_line.lazy.drop(num). ....(後略)....
ただし Enumerator::Lazy は Ruby 2.0 で追加された組込みモジュールだから、
Ruby 1.8/1.9 で利用するなら enumerable-lazy という Gems パッケージが必要になる
■ このスレッドは過去ログ倉庫に格納されています