5 Stimmen

NSMutableArray's insertObjects:atIndexes und Index außerhalb der Grenzen

Gibt es eine Möglichkeit, NSMutableArray zu erhalten, damit Sie "Löcher" innerhalb des Arrays, wo nur Teile des Arrays gefüllt werden, anstatt mit zusammenhängenden Elementen haben?

Ich möchte das anfängliche Array mit einigen Elementen erstellen, die am Anfang des Arrays eingefügt werden. Einige Zeit später möchte ich 9 neue Elemente einfügen, und zwar nicht unmittelbar nach dem letzten Element, sondern an einem Punkt in der Mitte des Arrays, wodurch ein Loch in Teilen der Array-Liste entsteht.

Ich dachte, ich könnte dies mit tun, aber ich bekomme die Fehlermeldung :

NSRangeException', reason: '***
-[NSMutableArray insertObject:atIndex:]: index 28 beyond bounds [0 .. 5]'

Code:

NSMutableArray *targetArray = [NSMutableArray arrayWithCapacity:100];

- (void)fillInInitially {

// Add the first set of elements to the beginning of the array
    for (int i = 0; i < [initialData count]; ++i)
    {
        [targetArray insertObject:[initialData objectAtIndex:i] atIndex:i];
    }
}

- (void)fillInTheBlank:(NSArray *) additions {

    // Start adding at index position 28 and current array has 5 items
    NSRange range = NSMakeRange(28, [additions count]);     
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];

    // Can't do this when I'm trying to add 9 new items at index 28
    // because of the error: index 28 beyond bounds [0 .. 5]
    [targetArray insertObjects:additions atIndexes:indexSet];
}

Ich wollte keine "leeren" Elemente in die Löcher einfügen, da dies Speicherplatz beanspruchen würde, wenn ich mehrere hundert Objekte in dem Array habe.

Ich brauche eine Art von "sparse" Array-Datenstruktur.

4voto

David Liu Punkte 9157

Sie können es mit [NSNull null] füllen. Es ist ein Singleton, also werden Sie keinen zusätzlichen Platz benötigen, wenn Sie Ihr Array mit 100 [NSNull null]s füllen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X