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 个切片的主要内容,如果未能解决你的问题,请参考以下文章

使用向量化时如何跳过前n行

在读取 Python 文件中的行时跳过前几行

使用正则表达式和 sed 时跳过前 n 行?

Kettle使用_31 CSV文件输入跳过前几(首)行之过滤记录

Stream skip()跳过前N个子元素

Stream skip()跳过前N个子元素