我有一个备份脚本,我将所有对象放在一个目录中,然后用每 30,000 个切片将它们备份到 S3。现在我的问题是我有超过 100,000 个对象,我想跳到第 2 片,但我不确定该怎么做。所以循环的开始看起来像 -
directory.files.each_slice(30000) do |file_array|
directory.files.each_slice(30000).skip(1)
有什么想法吗?
谢谢!
我有一个备份脚本,我将所有对象放在一个目录中,然后用每 30,000 个切片将它们备份到 S3。现在我的问题是我有超过 100,000 个对象,我想跳到第 2 片,但我不确定该怎么做。所以循环的开始看起来像 -
directory.files.each_slice(30000) do |file_array|
directory.files.each_slice(30000).skip(1)
有什么想法吗?
谢谢!
each_slice
返回一个可枚举的,然后您可以在其上调用更多可枚举的方法,因此您可以使用它with_index
来执行类似的操作
directory.files.each_slice(30000).with_index { | file_array, i |
next if i == 2
upload file_array
}
您的假设skip
方法称为drop
:
directory.files.each_slice(30000).drop(1).each do |file_array|
请注意,与所有 Enumerable
方法一样,它不是类型保留的,它总是返回 an Array
,即使您在 an 上调用它也是如此Enumerator
。因为你现在只有大约 4 片,所以这不是问题,但如果你有数百万片,那会很快耗尽你的记忆。
这个怎么样:
directory.files.each_slice(30000).with_index do |files, idx|
next if idx == 0
...
end