2011-07-27 8 views
13

4000オブジェクトを含むNSArrayを30個のオブジェクトを持つ複数の配列に分割する簡単な方法はありますか?4000オブジェクトを含むNSArrayを30個のオブジェクトを持つ複数の配列に分割する簡単な方法はありますか?

だから今、私は[スタッフ数] = 4133

にNSArray *のものは、私が30個のオブジェクトの配列を保持して新しい配列を作りたいです。ループスルーして新しい30オブジェクト配列に分解し、それをより大きな配列の内側に配置するにはどうすればよいでしょうか?

明らかに、最後の配列には30個はありません(残りは残ります)が、正しく処理する必要があります。

意味がありますか?これを行う効率的な方法があれば教えてください。私の頭の上オフ

答えて

47

、(未テスト)のようなもの:

NSMutableArray *arrayOfArrays = [NSMutableArray array]; 

int itemsRemaining = [stuff count]; 
int j = 0; 

while(itemsRemaining) { 
    NSRange range = NSMakeRange(j, MIN(30, itemsRemaining)); 
    NSArray *subarray = [stuff subarrayWithRange:range]; 
    [arrayOfArrays addObject:subarray]; 
    itemsRemaining-=range.length; 
    j+=range.length; 
} 

MIN(30, i)は、必ずしもそれに30個のアイテムを持っていないことを最後の配列の世話をします。

+0

に@samvermetteの答えを変換されたIは、MIN(30、I)とのあなたのアプローチが好きです。非常にきれいな。私はこれを使用します、ありがとう! –

2
  NSMutableArray *arrayOfArrays = [NSMutableArray array]; 
      int batchSize = 30; 

      for(int j = 0; j < [stuff count]; j += batchSize) { 

       NSArray *subarray = [stuff subarrayWithRange:NSMakeRange(j, MIN(batchSize, [stuff count] - j))]; 
       [arrayOfArrays addObject:subarray]; 
      } 
-1

SWIFT 3

 var arrayOfArraySlices = [ArraySlice<CBOrder>]() // array of array slices 

     var itemsRemaining = orderArray.count 
     var j = 0 

     while itemsRemaining > 0 { 
      let range = NSRange(location: j, length: min(20, itemsRemaining)); 
      let arraySlice = orderArray[range.location..<range.location + range.length] 
      arrayOfArraySlices.append(arraySlice) 
      itemsRemaining -= range.length; 
      j += range.length; 
     } 
関連する問題