代码之家  ›  专栏  ›  技术社区  ›  Richard J. Ross III

以编程方式调整NSArray的大小

  •  4
  • Richard J. Ross III  · 技术社区  · 14 年前

    我一直在想是否可以通过编程调整 NSArray ,使用类似的代码:

    NSArray *resize = [NSArray arrayResized:oldarray size:10];
    

    不可变数组 (不是 NSMutableArray 如果可能的话 oldarray 填充 [NSNull null]

    3 回复  |  直到 13 年前
        1
  •  2
  •   Jacob Relkin    14 年前

    由于NSArray对象是不可变的(不能更改它们包含的对象),因此调整NSArray的容量是没有用的。

    但是,你可以写一个类别,按照你想要的方式做一些事情:

    @interface NSArray (Resizing) 
    
    -(NSArray *) resize:(NSInteger) newSize;
    
    @end
    
    @implementation NSArray (Resizing)
    
    -(NSArray *) resize:(NSInteger) newSize {
       int size = (newSize > [self count]) ? self.count : newSize; 
       NSMutableArray *array = [NSMutableArray arrayWithCapacity:size];
       for(int i = 0; i < size; i++) 
          [array addObject:[self objectAtIndex:i]];
       return [NSArray arrayWithArray:array];
    }
    
    @end
    
        2
  •  2
  •   retainCount    14 年前

    而你的问题应该是“你到底想做什么?”,下面是一个可能的解决方案:

    @interface NSArray (RCArrayAdditions)
    - (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls;
    @end
    
    @implementation NSArray (RCArrayAdditions)
    - (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls {
        NSMutableArray *expandedArray = [self mutableCopy];
        for (NSUInteger i = 0; i < numberOfAppendedNulls; i ++) {
            [expandedArray addObject:[NSNull null]];
        }
        return expandedArray;
    }
    @end
    
        3
  •  0
  •   user108012 user108012    14 年前