Yup. Вам нужно пройти через массив и проверить с помощью регулярного выражения. Вы должны сделать это, так как если вы просто проверить, если массив содержит вашу строку, он не возвращает истину, если вы ищете «Джон» и только один в вашем массиве «John1»
NSMutableArray *testArray = [[NSMutableArray alloc] initWithObjects:@"John", @"Steve", @"Alan", @"Brad", nil];
NSString *nameToAdd = @"John";
NSString *regex = [NSString stringWithFormat:@"%@[,]*[0-9]*", nameToAdd];
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
for (int i = 0; i < [testArray count]; i++)
{
NSString *string = [testArray objectAtIndex:i];
if ([myTest evaluateWithObject:string])
{
// Matches
NSLog(@" match !");
int currentValue;
NSArray *split = [string componentsSeparatedByString:@","];
if ([split count] == 1)
{
// Set to 2
currentValue = 2;
}
else
{
currentValue = [[split objectAtIndex:1] intValue];
currentValue++;
}
NSString *newString = [NSString stringWithFormat:@"%@,%d", nameToAdd, currentValue];
[testArray replaceObjectAtIndex:i withObject:newString];
}
}
for (NSString *string in testArray)
{
NSLog(@"%@", string);
}
Этот заменит «Джон» на «Джон, 2», и если вы в третий раз найдете «Джона», он заменит его «Иоанном, 3».
Надеется, что это помогает
Спасибо, Сэм, вы ответили на мой вопрос. –
Этот код выполняет множество ненужных манипуляций с строками и модификаций массива. – rmaddy
Да, rmaddy. Это довольно неэффективно, но совершенно очевидно, что происходит, и отличный способ объяснить, как решить проблему. Хороший момент, хотя – Sam