我通過一個大目錄中的文件與迭代:打破紅寶石Find.find循環出來的時候條件滿足
Find.find('/some/path/to/directory/root') do |path|
# ...do stuff with files…
end
什麼是一個好辦法,這個枚舉組的大小限制爲500
(或破出於其他方式)如果,比如說,Rails.env.development?
?
我可以使用計數器,但什麼是「Ruby方式」?
我通過一個大目錄中的文件與迭代:打破紅寶石Find.find循環出來的時候條件滿足
Find.find('/some/path/to/directory/root') do |path|
# ...do stuff with files…
end
什麼是一個好辦法,這個枚舉組的大小限制爲500
(或破出於其他方式)如果,比如說,Rails.env.development?
?
我可以使用計數器,但什麼是「Ruby方式」?
這是一種方式:
Find.find('/some/path/to/directory/root').first(500).each do |path|
# do something
end
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'
如果limit
是0
你會處理一切。如果是> 0
,則會循環limit
次。
您還可以使用Dir.entries
或Dir.glob
,它將返回一個條目數組,您可以根據需要將其分開。
Enumerable的each_slice
在這一點上可能很有用。
This works too!如此多的文件(數十萬),我認爲懶加載將成爲... – Meltemi
我現在正在試驗它,以確認/否定Find.find是否實際上會行動遲緩。它看起來像在文檔中,但現實似乎是不同的,至少在調試器的現實中。 –
如果我正在生產並且不想限制結果,我不知道要用什麼來代替'500'?!我試過'take(0)'(返回空數組)和'take(-1)'(返回錯誤)。 – Meltemi