【问题标题】:each_slice ruby with a skip the first x sliceseach_slice ruby​​ 跳过前 x 个切片
【发布时间】: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) 

有什么想法吗?

谢谢!

【问题讨论】:

    标签: ruby loops enumerable


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2011-08-24
          • 1970-01-01
          • 2018-06-22
          • 2021-09-25
          • 2010-11-30
          • 1970-01-01
          • 2021-04-26
          • 1970-01-01
          • 2011-08-31
          相关资源
          最近更新 更多