【问题标题】:What is an easy way to break an NSArray with 4000+ objects in it into multiple arrays with 30 objects each?将包含 4000 多个对象的 NSArray 分解为每个包含 30 个对象的多个数组的简单方法是什么?
【发布时间】:2011-10-14 16:27:49
【问题描述】:

有什么简单的方法可以将包含 4000 个对象的 NSArray 分解为多个数组,每个数组包含 30 个对象?

所以现在我有一个 NSArray *stuff 其中 [stuff count] = 4133。

我想创建一个包含 30 个对象的数组的新数组。什么是循环遍历的好方法,将 *stuff 分解为新的 30 对象数组,然后将它们放入更大的数组中?

显然最后一个数组中不会有 30(它会有余数),但我需要正确处理。

有意义吗?让我知道是否有有效的方法来做到这一点。

【问题讨论】:

    标签: iphone objective-c xcode cocoa nsarray


    【解决方案1】:

    将@samvermette 的答案转换为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;
            }
    

    【讨论】:

      【解决方案2】:

      在我的脑海中,类似于(未经测试):

      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 个项目的数组。

      【讨论】:

      • 我喜欢您使用 MIN(30, i) 的方法。很干净。我会用这个,谢谢!
      【解决方案3】:
                  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];
                  }
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        相关资源
        最近更新 更多