在iOS中创build一个整数数组
如果你想制作一个整数数组,你可以使用NSInteger吗? 你必须使用NSNumber吗? 如果是的话,那为什么?
你可以使用一个普通的旧C数组:
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]);
或者,您可以使用NSArray
或NSMutableArray
,但是在这里您需要将NSNumber
实例中的每个整数封装起来(因为NSArray
对象被devise用于保存类实例)。
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]);
C数组:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C数组:
NSArray *array = @[@1, @2, @3, @4, @5, @6]; // numeric values must in that case be wrapped into NSNumbers
Swift数组:
var array = [1, 2, 3, 4, 5, 6]
这也是正确的:
var array = Array(1...10)
NB:数组在Swift中是强types的; 在这种情况下,编译器从内容中推断出数组是一个整数数组。 你也可以使用这种显式types的语法:
var array: [Int] = [1, 2, 3, 4, 5, 6]
如果你想要一个双精度数组,你可以使用:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
要么:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
如果你想使用一个NSArray,你需要一个Objective-C类来放入它 – 因此NSNumber的要求。
也就是说,Obj-C仍然是C,所以你可以使用常规的C数组,并且如果需要的话,可以使用常规的整数而不是NSNumber。
您可以使用CFArray而不是NSArray。 这里是一篇文章解释如何。
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL); for (NSUInteger i = 0; i < 1000; i++) { CFArrayAppendValue(ar, (void*)i); } CFRelease(ar); /* Releasing the array */
CoreFoundation版本的其他容器也一样。
我创build了一个简单的Objective C包装器,用于更好地使用旧的C数组: https : //gist.github.com/4705733
如果整数的顺序不是必需的,并且只有唯一的值
你也可以使用NSIndexSet或NSMutableIndexSet你将能够轻松地添加和删除整数,或检查你的数组是否包含一个整数
- (void)addIndex:(NSUInteger)index - (void)removeIndex:(NSUInteger)index - (BOOL)containsIndexes:(NSIndexSet *)indexSet
检查文档以获取更多信息。
我认为使用NSNumbers要容易得多。 这一切你需要做的:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1]; NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2]; . . . NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];