Самый быстрый способ манипулировать строками в 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

Примечание: не забудьте импортировать вашу категорию, где вы используете индексированный синтаксис.

Другие вопросы по тегам