在for循環中執行批處理的最佳方法是什麼?所有apis今天都有可以提取的最大數量的項目。 例如,一批100條推文。在這種情況下,如果我有一個我想要查詢信息的1001個ID的列表,那麼我需要撥打11個呼叫,每批100個ID。我會使用一個for循環來調用任務,一旦一批100人形成,就會調用任務中的條件。 有沒有更好的方法來做到這一點? 鑑於這是一種常見模式,不應該有語言中的內置構造來處理這個問題嗎?我錯過了什麼嗎?成批循環
Q
成批循環
0
A
回答
0
我結合了while和for循環
int totalItems = 1001;
int batchSize = 100;
int i = 0;
while (i < totalItems){
[self fetchABatch:(totalItems-i)];
i += batchSize;
}
-(void)fetchABatch:(int) count
{
if (count > batchSize){
// fetch full batch
}else{
batchSize = count;
// fetch a partial batch
}
}
0
如果API限制你100條記錄的時間,然後是你將需要11名的請求,周圍有沒有得到。
我可能會創建一個NSOperation
封裝爲每個頁面的請求,創建(在本例中11),一個你需要的所有頁面,然後拖放到一個NSOperationQueue
,因爲每個操作完成,你可以把他們的成果,將它們放入內存中的一個統一數組中,或者將它們寫入Core Data。
0
你的問題不清楚。但是,如果你想要做的事在for循環中每100次只是做 如果(I%100 == 0){// 做我的事 }
1
在Objective-C,你可以建立自己的額外的結構如果你想要一個:
@interface NSArray (OKBatchedSubarrays)
// this will return an array of subarrays, with each of those
// containing no more items than batchSize, and the order of input
// objects being preserved
- (NSArray *)subarraysWithBatchSize:(NSUInteger)batchSize;
@end
...
@implementation NSArray (OKBatchedSubarrays)
- (NSArray *)subarraysWithBatchSize:(NSUInteger)batchSize
{
NSMutableArray *outputBatches = [NSMutableArray array];
// or arrayWithCapacity:([self count] + (batchSize - 1))/batchSize
// if you want to be really explicit, but it's not important to the example
NSRange subarrayRange = NSMakeRange(0, batchSize);
while(subarrayRange.location < self.count)
{
// make sure we're not about to ask for out-of-bounds data
if(subarrayRange.location + subarrayRange.length > self.count)
subarrayRange.length = self.count - subarrayRange.location;
// add another batch to the output array
[outputBatches addObject:[self subarrayWithRange:subarrayRange]];
// advance beyond the range we just grabbed
subarrayRange.location += subarrayRange.length;
}
return outputBatches;
}
@end
然後在其他地方你只是做:
NSArray *thingsToFetch = <... whatever ...>;
for(NSArray *batch in [thingsToFetch subarraysWithBatchSize:100])
{
// post to server with all things in 'batch'
}
相關問題
- 1. 批量循環
- 2. 窗戶一批循環沒有完成
- 3. 從列表中生成循環批次
- 4. 批處理循環
- 5. 雙循環成單循環
- 6. WHILE循環在批量循環內FOR循環
- 7. for循環批處理腳本teminates批
- 8. 批循環分隔文本
- 9. Windows批處理循環
- 10. 批循環/輸出問題
- 11. 批量循環CACLS函數
- 12. 在Windows批次循環
- 13. 批處理和for循環
- 14. 批次wmi for循環
- 15. 嵌套批次循環
- 16. 增量批量循環
- 17. 批次 - 在一個循環
- 18. 批次... Do循環腳本
- 19. 批'FOR'循環解析器
- 20. 批處理while循環
- 21. 批量退出for循環
- 22. 批次爲循環陣列
- 23. 批處理編程循環?
- 24. 批次for循環問題
- 25. 轉義|在批次循環
- 26. 批量使用循環
- 27. javascript循環完成後循環打印
- 28. 翻譯while循環成環
- 29. 批處理腳本 - 退出循環的時候又一批已經完成
- 30. 在定義的循環數之後批量退出循環
一個'for'環能做到這一點,是的。有什麼問題? –
爲什麼您認爲Objective-C(或其他語言)應該在語言中使用特殊的構造,僅僅是因爲某些第三方Web API對於一次可以提出的請求數量有限制? – rmaddy