2

私はすでに容量を 5 に設定した配列を持っています。私がやりたいことは、オブジェクトを追加して容量が 5 を超えると、オブジェクトの配列構造全体が 1 つ移動することです。たとえば、1,2,3,4,5 (配列)。次に、6 が追加されると、5 を置き換えて 1 つを削除し、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のように並べ替えて保存します。前もって感謝します..

4

3 に答える 3

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);
}
于 2013-02-22T07:12:42.813 に答える
1

このように配列に値を追加するメソッドを作成します。5 を超えると最初のオブジェクトが削除され、最後のオブジェクトが追加されます。

-(void)addObjectToArray:(id)lastObj
{
   [array addObject:lastObj];
    if ([array count]>5) {
        [array removeObjectAtIndex:0];
    }
}
于 2013-02-22T07:12:28.377 に答える
0

index が既に占有されている場合、index およびそれ以降のオブジェクトは、それらのインデックスに 1 を追加してスペースを空けることによってシフトされます。したがって、使用できるのはreplaceObjectAtIndex:withObject次のとおりです。これにより、オブジェクトが置き換えられます。ただし、最初のオブジェクトを削除する場合は、自分で行います。最初に配列の長さを確認します。5 より大きい場合は、最初の要素を削除し、すべてのオブジェクトを下位のインデックスにシフトします。次に、新しいオブジェクトを追加します。

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

[array insertObject:new object atIndex :5];
于 2013-02-22T07:12:28.673 に答える