繁体   English   中英

替换,移动NSMutableArray中的对象

[英]Replace, move objects in NSMutableArray

我有一个已经将容量设置为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);
            }

但它会像1,2,3,4,20,19,18,17 ... 6那样存储所有20个信息,将不胜感激! 先感谢您..

您可以这样做:

即使您可以将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);
}

创建像这样向数组添加值的方法。当第一个对象超过5个时将删除第一个对象,并添加最后一个对象。问题已解决

-(void)addObjectToArray:(id)lastObj
{
   [array addObject:lastObj];
    if ([array count]>5) {
        [array removeObjectAtIndex:0];
    }
}

快乐的编码。

如果index已被占用,则将index处及以上的对象移至其索引处以增加1来腾出空间。 因此,您可以使用的是replaceObjectAtIndex:withObject :这将替换对象。 但是,如果要删除第一个对象,请自行完成。 首先检查数组的长度。 如果大于5,则删除第一个元素,并将所有对象移至较低的索引。 然后添加新对象。

if ([array count]>=5)
{
[array removeObjectAtIndex:index];

[array insertObject:new object atIndex :5];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM