Ruby on rails 满足条件时中断Ruby Find.Find循环

Ruby on rails 满足条件时中断Ruby Find.Find循环,ruby-on-rails,ruby,find,enumeration,Ruby On Rails,Ruby,Find,Enumeration,我正在遍历一个包含以下文件的大目录: Find.find('/some/path/to/directory/root') do |path| # ...do stuff with files… end 如果(比如)Rails.env.development(Rails.env.development),将此可枚举组的大小限制为500(或以其他方式中断)的好方法是什么 我可以使用计数器,但什么是“Ruby方式”?这是一种方式: Find.find('/some/path/to/directo

我正在遍历一个包含以下文件的大目录:

Find.find('/some/path/to/directory/root') do |path|
  # ...do stuff with files…
end
如果(比如)Rails.env.development(Rails.env.development),将此可枚举组的大小限制为
500
(或以其他方式中断)的好方法是什么

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

这是一种方式:

Find.find('/some/path/to/directory/root').first(500).each do |path|
  # do something
end
这是一种方式:

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'
用它来记录你处理了多少

如果你想“全做”:

限制=
do_em_all=(limit==0)
Find.Find(ENV['HOME'])。使用_索引(1)do | path,i|
放置路径
除非(do|em|u all | i 0
您将循环
限制
次数,否则中断

您还可以使用或
Dir.glob
,它将返回一个条目数组,您可以根据需要对其进行切片


Enumerable在这一点上可能很有用。

Find.Find
枚举文件;换句话说,它希望循环遍历所有文件。您可以使用以下方法附加索引值:

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

puts 'done'
用它来记录你处理了多少

如果你想“全做”:

限制=
do_em_all=(limit==0)
Find.Find(ENV['HOME'])。使用_索引(1)do | path,i|
放置路径
除非(do|em|u all | i 0
您将循环
限制
次数,否则中断

您还可以使用或
Dir.glob
,它将返回一个条目数组,您可以根据需要对其进行切片


可枚举的在这一点上可能很有用。

这也有效!这么多文件(数十万个)我认为延迟加载将是一种方式……我现在正在试验它,以确认/否认Find.Find是否真的会延迟运行。它在文档中看起来是这样的,但实际情况似乎有所不同,至少在调试器的实际情况下是这样的。如果我在生产环境中并且不想lim,我不清楚用什么替换
500
结果如何?!?我已经尝试了
take(0)
(返回空数组)和
take(-1)
(返回错误)。files=if Rails.env.production?;Find.Find(..);else;Find.Find(..)。first(500);end;files.each do | f |。。。;end@farleyknight-一个有条件的!我猜这必须要做。thx!这也行!这么多文件(数十万)我认为延迟加载将是一种方式……我现在正在试验它,以确认/否认Find.Find是否真的会延迟运行。它在文档中看起来是这样的,但实际情况似乎有所不同,至少在调试器的实际情况下是这样的。如果我在生产环境中并且不想lim,我不清楚用什么替换
500
结果如何?!?我已经尝试了
take(0)
(返回空数组)和
take(-1)
(返回错误)。files=if Rails.env.production?;Find.Find(..);else;Find.Find(..)。first(500);end;files.each do | f |。。。;end@farleyknight-有条件的!我想那就行了。谢谢!