NSArray умножить каждый аргумент - PullRequest
1 голос
/ 16 апреля 2010

Есть ли способ умножить каждый NSNumber, содержащийся в массиве, на 10? Вот что у меня есть:

NSMutableArray *vertex = [NSMutableArray arrayWithCapacity:3];

[vertex addObject:[NSNumber numberWithFloat:1.0]]; 
[vertex addObject:[NSNumber numberWithFloat:2.0]];
[vertex addObject:[NSNumber numberWithFloat:3.0]];

[vertex makeObjectsPerformSelector:@selector(doSomethingToObject:)];

Я не уверен, какой селектор использовать для этого, пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Не легко, нет. Вы должны были бы пройтись по всему циклу и заменить все эти экземпляры NSNumber новыми экземплярами NSNumber (сам NSNumber является неизменным). Так, например:

for( int i = 0; i < [vertex count]; i++ )
  [vertex replaceObjectAtIndex:i withObject:[NSNumber numberWithFloat:[[vertex objectAtIndex:i] floatValue] * 10.0f]];

Очевидно, что это довольно трудно читать. Возможно, вам лучше использовать обычный, примитивный массив с плавающей точкой, если вы собираетесь часто ими манипулировать (например, применять к ним преобразования).

0 голосов
/ 16 апреля 2010

Краткий ответ - нет.

NSNumber просто контейнера для примитивного значения. Это не делает никакой математической работы. Метод makeObjectsPerformSelector может использоваться для указания каждому объекту в массиве что-то делать. Но класс каждого из этих объектов должен иметь метод, для которого предназначен селектор. NSNumber также не предоставляет какого-либо метода для изменения сохраненного значения. Поэтому, даже если вы добавили категорию в NSNumber для выполнения математических операций, вам все равно придется заменить старое значение в массиве на новое вычисленное.

Я думаю, что лучшим решением было бы добавить метод категории к NSMutableArray для выполнения работы. Он будет просматривать содержимое, вычислять каждое новое значение и затем заменять каждый элемент массива новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...