在iOS中创建一个整数数组

时间:2010-07-27 01:28:08

标签: ios objective-c

如果要创建整数数组,可以使用NSInteger吗?你必须使用NSNumber吗?如果是这样,为什么呢?

7 个答案:

答案 0 :(得分:155)

您可以使用普通的旧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]);

或者,您可以使用NSArrayNSMutableArray,但在这里您需要将NSNumber实例中的每个整数包装起来(因为NSArray个对象的设计目标是持有类实例)。

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]);

答案 1 :(得分:52)

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)

注意:数组在Swift中是强类型的;在这种情况下,编译器从内容中推断出数组是整数数组。您也可以使用此显式类型语法:

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

答案 2 :(得分:5)

如果你想使用NSArray,你需要一个Objective-C类来加入它 - 因此需要NSNumber。

也就是说,Obj-C仍然是C,因此如果需要,你可以使用常规的C数组并保持常规的int而不是NSNumbers。

答案 3 :(得分:4)

您可以使用CFArray代替NSArray。 Here是一篇解释如何的文章。

CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
  CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */

同样适用于其他容器的CoreFoundation版本。

答案 4 :(得分:4)

我在旧的C数组周围创建了一个简单的Objective C包装器,以便更方便地使用:https://gist.github.com/4705733

答案 5 :(得分:3)

如果不需要整数的顺序,  如果只有唯一值

您也可以使用NSIndexSet或NSMutableIndexSet 您将能够轻松添加和删除整数,或检查您的数组是否包含带

的整数
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet

查看documentation了解详情。

答案 6 :(得分:2)

我认为使用NSNumbers要容易得多。这就是你需要做的所有事情:

NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];