2013-09-30 44 views
0

我通過一個大目錄中的文件與迭代:打破紅寶石Find.find循環出來的時候條件滿足

Find.find('/some/path/to/directory/root') do |path| 
    # ...do stuff with files… 
end 

什麼是一個好辦法,這個枚舉組的大小限制爲500(或破出於其他方式)如果,比如說,Rails.env.development?

我可以使用計數器,但什麼是「Ruby方式」?

回答

2

這是一種方式:

Find.find('/some/path/to/directory/root').first(500).each do |path| 
    # do something 
end 
1

Find.find列舉了文件;換句話說,它想循環所有這些。你可以使用以下指標值:

Find.find(ENV['HOME']).with_index(1) do |path, i| 
    puts path 
    break if i > 10 
end 

puts 'done' 

並使用它來跟蹤您處理了多少。

如果你想 「做「時間都」:

limit = <some number> 

do_em_all = (limit == 0) 
Find.find(ENV['HOME']).with_index(1) do |path, i| 
    puts path 
    break unless (do_em_all || i <= limit) 
end 

puts 'done' 

如果limit0你會處理一切。如果是> 0,則會循環limit次。

您還可以使用Dir.entriesDir.glob,它將返回一個條目數組,您可以根據需要將其分開。

Enumerable的each_slice在這一點上可能很有用。

+0

This works too!如此多的文件(數十萬),我認爲懶加載將成爲... – Meltemi

+0

我現在正在試驗它,以確認/否定Find.find是否實際上會行動遲緩。它看起來像在文檔中,但現實似乎是不同的,至少在調試器的現實中。 –

+0

如果我正在生產並且不想限制結果,我不知道要用什麼來代替'500'?!我試過'take(0)'(返回空數組)和'take(-1)'(返回錯誤)。 – Meltemi