我有一个数组,我已经将容量设置为5。 我想要做的是,当我添加一个对象并且容量超过5时,它将整个对象的数组结构移动一个。例如1,2,3,4,5(数组)。然后当6被添加它必须替换5并删除一个导致2,3,4,5,6等等。所以换句话说它只需要保存最后5个对象。但是在实际编码中,它将保存具有100+容量的阵列中坐标的对象,因此必须快速有效。 我尝试用int来看看它是如何进展的:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];
int i;
for (i = 0; i<=20;i++ ) {
NSNumber *number = [NSNumber numberWithInt:i];
if (i>=5) {
[array insertObject:number atIndex:5];
}else{
[array addObject:number];
}
NSLog(@"array = %@, count = %i",array, array.count);
}
但它存储所有20个排序,如1,2,3,4,20,19,18,17 ... 6任何帮助将不胜感激!提前谢谢..
答案 0 :(得分:3)
你可以这样做:
即使你可以把addTo:withValueLast:作为一个类别:
-(NSMutableArray *)addTo:(NSMutableArray *)array withLastValue:(NSNumber *)number{
if (array.count<5) {
[array addObject:number];
}
else{
[array removeObjectAtIndex:0];
[array addObject:number];
}
return array; }
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];
for (int i=0; i<=20; i++) {
NSNumber *number = [NSNumber numberWithInt:i];
[self addTo:array withLastValue:number];
NSLog(@"array = %@, count = %ld",array, array.count);
}
}
使用类别:
.h文件:
@interface NSMutableArray (Slide)
-(NSMutableArray *)slideWithValue:(NSNumber *)number;
@end
.m文件:
#import "NSMutableArray+Slide.h"
@implementation NSMutableArray (Slide)
-(NSMutableArray *)slideWithValue:(NSNumber *)number{
if (self.count<5) {
[self addObject:number];
}
else{
[self removeObjectAtIndex:0];
[self addObject:number];
}
return self;
}
@end
现在你的代码如下:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];
for (int i=0; i<=20; i++) {
NSNumber *number = [NSNumber numberWithInt:i];
[array slideWithValue:number];
NSLog(@"array = %@, count = %ld",array, array.count);
}
答案 1 :(得分:1)
创建像这样向数组添加值的方法。当超过5并且添加最后一个对象时,将删除第一个对象。问题已解决
-(void)addObjectToArray:(id)lastObj
{
[array addObject:lastObj];
if ([array count]>5) {
[array removeObjectAtIndex:0];
}
}
快乐的编码。
答案 2 :(得分:0)
如果索引已被占用,则索引及以后的对象会通过在索引中加1来移动以腾出空间。
所以你可以使用的是replaceObjectAtIndex:withObject
:
这将取代对象。但是如果你想删除第一个对象,你就自己做了。
首先检查数组的长度。如果大于5,则删除第一个元素并将所有对象移动到较低的索引。然后添加新对象。
if ([array count]>=5)
{
[array removeObjectAtIndex:index];
[array insertObject:new object atIndex :5];