each_slice ruby 跳过前 x 个切片
Posted
技术标签:
【中文标题】each_slice ruby 跳过前 x 个切片【英文标题】:each_slice ruby with a skip the first x slices 【发布时间】:2012-11-14 08:12:46 【问题描述】:我有一个备份脚本,我将所有对象放在一个目录中,然后将每个 30,000 个切片备份到 S3。 我的问题是现在我有超过 100,000 个对象,我想跳到第 2 片,但我不确定如何去做。 所以循环的开始看起来像 -
directory.files.each_slice(30000) do |file_array|
directory.files.each_slice(30000).skip(1)
有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:each_slice
返回一个可枚举,然后您可以在其上调用更多可枚举方法,因此您可以使用 with_index
执行类似的操作
directory.files.each_slice(30000).with_index | file_array, i |
next if i == 2
upload file_array
【讨论】:
【参考方案2】:您假设的skip
方法称为drop
:
directory.files.each_slice(30000).drop(1).each do |file_array|
请注意,像 all Enumerable
方法一样,它不是类型保留的,它总是返回一个 Array
,即使您在 Enumerator
上调用它也是如此。由于您目前只有大约 4 个切片,这不会成为问题,但如果您有数百万个切片,那将很快耗尽您的记忆。
【讨论】:
【参考方案3】:这个怎么样:
directory.files.each_slice(30000).with_index do |files, idx|
next if idx == 0
...
end
【讨论】:
以上是关于each_slice ruby 跳过前 x 个切片的主要内容,如果未能解决你的问题,请参考以下文章