0

ディレクトリ内のすべてのオブジェクトを取得し、30,000 の各スライスで S3 にバックアップするバックアップ スクリプトがあります。私の質問は、100,000 を超えるオブジェクトがあることです。スライス番号 2 にスキップしたいのですが、その方法がわかりません。したがって、ループの開始は次のようになります -

directory.files.each_slice(30000) do |file_array|

directory.files.each_slice(30000).skip(1) 

何かご意見は?

ありがとう!

4

3 に答える 3

2

each_slice列挙可能なものを返し、さらに列挙可能なメソッドを呼び出すことができるため、with_index次のようなことを行うために使用できます

directory.files.each_slice(30000).with_index { | file_array, i | 
    next if i == 2 
    upload file_array 
}
于 2012-11-26T19:43:06.990 に答える
1

あなたの仮説的skipな方法は次のように呼ばれdropます:

directory.files.each_slice(30000).drop(1).each do |file_array|

すべての Enumerableメソッドと同様に、これは型を保持しないことに注意してArrayくださいEnumerator。現時点では約 4 つのスライスしかないので問題にはなりませんが、何百万ものスライスがあると、すぐにメモリを使い果たしてしまいます。

于 2012-11-26T19:49:10.293 に答える
0

これはどう:

directory.files.each_slice(30000).with_index do |files, idx| 
  next if idx == 0
  ...
end
于 2012-11-26T19:48:27.977 に答える