Якщо ви хочете створити масив цілих чисел, можете скористатися NSInteger? Чи потрібно використовувати NSNumber? Якщо так, то чому?
Якщо ви хочете створити масив цілих чисел, можете скористатися 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
об'єкти призначені для зберігання екземплярів класу).
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
, я впевнений, що ви не відчуєте хіт продуктивності.
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
Швидкий масив:
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
Якщо ви хочете використовувати NSArray, вам потрібен клас Objective-C, щоб ввести його - отже, і вимога NSNumber.
Однак, Obj-C все ще є C, тому ви можете використовувати регулярні масиви C і утримувати регулярні вставки замість NSNumbers, якщо потрібно.
Ви можете використовувати 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 для інших контейнерів.
Я створив просту обертку Objective C навколо старого хорошого масиву C, який зручніше використовувати: https://gist.github.com/4705733
Якщо порядок ваших цілих чисел не потрібно, і якщо є лише унікальні значення
ви також можете використовувати NSIndexSet або NSMutableIndexSet. Ви зможете легко додавати та видаляти цілі числа чи перевіряти, чи містить ваш масив ціле число з
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Перегляньте документацію для отримання додаткової інформації.
NSSet
(та використанні цілих чисел, загорнутих у NSNumber
)?
Я думаю, що набагато простіше використовувати NSNumbers. Це все, що вам потрібно зробити:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for
або просто інший масив для чисел, а потім arrayWithArray
.