Wenn Sie ein Array von Ganzzahlen erstellen möchten, können Sie NSInteger verwenden? Müssen Sie NSNumber verwenden? Wenn ja, warum dann?
Wenn Sie ein Array von Ganzzahlen erstellen möchten, können Sie NSInteger verwenden? Müssen Sie NSNumber verwenden? Wenn ja, warum dann?
Antworten:
Sie können ein einfaches altes C-Array verwenden:
NSInteger myIntegers[40];
for (NSInteger i = 0; i < 40; i++)
myIntegers[i] = i;
// to get one of them
NSLog (@"The 4th integer is: %d", myIntegers[3]);
Oder Sie können ein NSArray
oder verwenden NSMutableArray
, aber hier müssen Sie jede Ganzzahl in einer NSNumber
Instanz einschließen (da NSArray
Objekte für Klasseninstanzen ausgelegt sind).
NSMutableArray *myIntegers = [NSMutableArray array];
for (NSInteger i = 0; i < 40; i++)
[myIntegers addObject:[NSNumber numberWithInteger:i]];
// to get one of them
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);
// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
NSArray
, bin ich sicher, dass Sie den Leistungseinbruch nicht spüren werden.
C-Array:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C-Array:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Swift Array:
var array = [1, 2, 3, 4, 5, 6]
Das ist auch richtig:
var array = Array(1...10)
NB: Arrays sind stark in Swift typisiert. In diesem Fall schließt der Compiler aus dem Inhalt, dass das Array ein Array von Ganzzahlen ist. Sie können auch diese explizite Syntax verwenden:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Wenn Sie eine Reihe von Doppel möchten, würden Sie verwenden:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
oder:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Wenn Sie ein NSArray verwenden möchten, benötigen Sie eine Objective-C-Klasse, um es einzufügen - daher die NSNumber-Anforderung.
Das heißt, Obj-C ist immer noch C, sodass Sie bei Bedarf reguläre C-Arrays verwenden und reguläre Ints anstelle von NSNumbers speichern können.
Sie können CFArray anstelle von NSArray verwenden. Hier ist ein Artikel, der erklärt, wie.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Gleiches gilt auch für die CoreFoundation-Version der anderen Container.
Ich habe einen einfachen Objective C-Wrapper um das gute alte C-Array erstellt, der bequemer verwendet werden kann: https://gist.github.com/4705733
Wenn die Reihenfolge Ihrer Ganzzahlen nicht erforderlich ist und nur eindeutige Werte vorhanden sind
Sie können auch NSIndexSet oder NSMutableIndexSet verwenden. Sie können ganz einfach Ganzzahlen hinzufügen und entfernen oder prüfen, ob Ihr Array eine Ganzzahl mit enthält
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Weitere Informationen finden Sie in der Dokumentation .
NSSet
(und der Verwendung von Ganzzahlen, die in eine eingeschlossen sind NSNumber
)?
Ich denke, es ist viel einfacher, NSNumbers zu verwenden. Das alles was Sie tun müssen:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for
oder nur ein anderes Array für die Zahlen verwenden, und dann arrayWithArray
.