当条件满足时,打破Ruby Find.find循环

时间:2013-09-30 22:51:38

标签: ruby-on-rails ruby find enumeration

我正在迭代一个大型文件目录:

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

如果,例如500

,将此可枚举组的大小限制为Rails.env.development?(或以其他方式突破)的好方法是什么?

我可以使用计数器,但是什么是“Ruby方式”?

2 个答案:

答案 0 :(得分:2)

这是一种方式:

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

答案 1 :(得分: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,它会返回您可以根据需要分割的条目数组。

此时可枚举的each_slice可能很有用。