Самый быстрый способ манипулировать строками в target-c
Я относительно новичок в Objective C, и я пытаюсь выяснить, как эффективно заменить символ в строке в случае, если я знаю индекс, где этот символ будет.
В основном, если S - моя строка, я хотел бы иметь возможность сделать это s[i] = 'n' для некоторых i
Но это выглядит довольно дорого для меня:
NSRange range = NSMakeRange(0,1);
NSString *newString = [S stringByReplacingCharactersInRange:range withString:@"n"];
Это не??
2 ответа
Да, для замены одного символа копирование всей строки действительно является излишним. Не похоже, что это сильно повлияет на производительность, если только это не является узким местом в вашем приложении, которое вызывается миллион раз в секунду, но все равно удобнее использовать NSMutableString
а также replaceCharactersInRange:NSMakeRange(0, 1) withString:@"n"
или просто вернитесь к использованию строк C, если скорость важна.
H2CO3 прав. Используйте изменяемые массивы. Вы также можете создать категорию для поддержки индексированного доступа к вашей строке:
NSMutableString + Index.h
@interface NSMutableString (Index)
- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)idx;
@end
NSMutableString + Index.h
@implementation NSMutableString (Index)
- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)idx {
[self replaceCharactersInRange:NSMakeRange(idx, 1) withString:anObject];
}
@end
Где-нибудь еще:
NSMutableString *str = [[NSMutableString alloc] initWithString:@"abcdef"];
str[2] = @"X";
NSLog(str);
Выход:
abXdef
Примечание: не забудьте импортировать вашу категорию, где вы используете индексированный синтаксис.