2013-02-22 57 views
2

我有一个数组,我已经将容量设置为5.我想要做的是,当我添加一个对象并且容量超过5时,它将移动整个对象的数组结构一个。例如1,2,3,4,5(数组)。然后在添加6时必须替换5并删除一个导致2,3,4,5,6等等。换言之,它只能保存最后5个对象。但在实际的编码中,它会将坐标保存在一个容量为100+的数组中,因此它必须快速高效。 我与诠释想看看它是如何进展:替换,移动NSMutableArray中的对象

 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

我可以给我自己的代码来完成这个任务? – 2013-02-22 07:05:30

+0

当然...谢谢! – user1780591 2013-02-22 07:06:12

+0

谢谢!对不起,但我没有代表upvote你..谢谢! – user1780591 2013-02-22 07:35:31

回答

0

如果索引已被占用,索引处及其以外的对象将通过在其索引上加1来移位以腾出空间。 所以你可以使用的是replaceObjectAtIndex:withObject: 这将取代对象。但如果你想删除第一个对象,你就可以完成自己的事情。 首先检查数组的长度。如果大于5,则删除第一个元素并将所有对象移到较低的索引处。然后添加新的对象。

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

[array insertObject:new object atIndex :5]; 
1

创造增值阵列像这样。它,当它超过5的d将删除第一个对象添加的最后一个对象.Problem的方法解决

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

快乐编码。

+0

谢谢..不幸的是,我没有声望upvote所有的答案,所以我会在这里谢谢你:) – user1780591 2013-02-22 07:34:14

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); 
} 
+0

我还没有测试过这个,但它通过添加[数组removeObjectAtIndex:0]刚刚添加新的对象,它似乎将所有的对象自动移动一个。谢谢你的详细答案。我很感激 – user1780591 2013-02-22 07:32:39