Как было сказано в комментариях: незнание вашей структуры данных затрудняет вашу помощь. В приведенном ниже примере я создал несколько примеров данных на первом этапе.
library(tidyverse)
#Create some sample data
data <- tibble(
text = c("President. - Are you Nikolaj Khvostov?",
"Khvostov. - Yes Mr. President."))
#A print of the sample data
data
#Create a variable called "new_text" using the mutate() function
#The function str_remove() from the stringr package is used to remove the unwnted elements
data %>%
mutate(
new_text = str_remove(text, pattern = "^[a-zA-Z]+\\. -"))
Вы не можете поместить переменную в массив, и это что myNumber
: переменная. Переменная является контейнером и так является массивом; различие - то, что переменная не является также объектом*, как массив, и можно только поместить объекты в массив.
Чему Вы передаете addObject:
не переменная myNumber
, но объект это содержит. Это - то, что Вы добавляете к массиву.
Для добавления переменной вместо объекта в нем необходимо было бы сделать addObject:&myNumber
, для передачи указателя на саму переменную. Но это не будет работать по двум причинам:
Существует три решения, которые будут работать:
Тем последним решением является, по-моему, корректное. Я сомневаюсь, что Вы управляете только списком чисел; более вероятно Вы показываете пользователю список чего-то, что имеет число как свойство. Смоделируйте это в своем коде, и все становится намного более простым.
Ваш код после замены пустого NSNumbers с объектами модели будет чем-то как:
MyModelObject *myModelObject = [[[MyModelObject alloc] init] autorelease];
[myModelObject setNumber:[NSNumber numberWithDouble:42.0]];
[myArray addObject:myModelObject];
//Some time later, you decide to change the number.
[[myArray objectAtIndex:idx] setNumber:[NSNumber numberWithDouble:43.0]];
//Or:
for (MyModelObject *obj in myArray) {
[obj setNumber:1000.0];
}
*Я имею в виду объекты Какао. Язык C действительно называет любой указатель, интервал, и т.д. “объект”, но это - другое определение.
Ваша проблема состоит в том, что объекты NSNumber неизменны; подразумевать, что Вы не можете изменить их значение. Таким образом, для изменения значения, необходимо создать новый объект NSNumber. Например:
myNumber = [NSNumber numberWithDouble:[myNumber doubleValue]+1.0]
Теперь, конечно, у Вас есть точка myNumber к другому объекту, чем тот, который Вы добавили к массиву. Таким образом, необходимо обновить массив путем замены измененного объекта NSNumber:
[myArray replaceObjectAtIndex:0 withObject:myNumber]
Ну, это оставляет Вас с проблемой, что необходимо сохранить индекс вместе с каждым NSNumber, чтобы смочь обновить массив. Который является incovenient, если Вы хотите раздать NSNumber, возражают и позволяют изменять значение.
Вы могли решить эту проблему путем представления интерфейсного объекта, что Вы переносите NSNumber для разрешения прозрачных обновлений, или Вы просто могли создать свой собственный класс, который обрабатывает Ваш doubleValue (несколько изменяемый класс NSNumber).
При изменении указателя myNumber затем как Вы сказали, значение, сохраненное в массиве, не изменяется. Однако указатель, сохраненный в массиве, является копией myNumber, поэтому при изменении объекта, что myNumber указывает на объект, что элемент массива указывает на, отразит, что изменение, потому что это - тот же объект.
То, что Вы, кажется, хотите сделать, должно высказать мнение массива к другому объекту (каждый раз, когда Вы изменяете myNumber). Необходимо будет сделать это вручную при помощи, например-replaceObjectAtIndex:withObject: как так:
NSNumber *myNumber = [NSNumber numberWithDouble: 3.141592];
int myNumberIndex = [myArray count];
[myArray addObject: myNumber];
myNumber = ...; //whatever
[myArray replaceObjectAtIndex: myNumberIndex withObject: myNumber];
То, что этот код делает, в основном, является хранилищем индекс объекта, который Вы помещаете в myArray и затем заменяете тот объект новым.