以编程方式调整 NSArray 大小

发布于 2024-09-28 11:42:18 字数 301 浏览 0 评论 0原文

我一直试图弄清楚是否可以使用类似于以下的代码以编程方式调整 NSArray 的大小:

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

这将是一个新的 NSArray (不是 NSMutableArray< /code> 如果可能的话)在 oldarray 末尾之后的元素用 [NSNull null] 填充。

I have been trying to figure out if it is possible to programmatically resize an NSArray, using code similar to this:

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

Which would a new NSArray (Not a NSMutableArray if it is possible) that has the elments after the end of oldarray padded with [NSNull null].

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

GRAY°灰色天空 2024-10-05 11:42:18

由于 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

Since NSArray objects are immutable (cannot change the objects they contain) there's no use in adjusting the capacity of NSArrays.

You could however, write a category that did something along the lines of what you want:

@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
无所的.畏惧 2024-10-05 11:42:18

虽然你的问题值得问“你真正想做什么?”,但这里有一个可能的解决方案:

@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

While your question merits a "What are you really trying to do?", here is a possible solution:

@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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文