我对Objective C比较陌生,我试图弄清楚如何在我知道该字符所在的索引的情况下有效地替换字符串中的字符。
基本上,如果 S 是我的字符串,我希望能够为某些 i 执行此操作 s[i] = 'n'
但这对我来说看起来相当昂贵:
NSRange range = NSMakeRange(0,1);
NSString *newString = [S stringByReplacingCharactersInRange:range withString:@"n"];
不是吗??
我对Objective C比较陌生,我试图弄清楚如何在我知道该字符所在的索引的情况下有效地替换字符串中的字符。
基本上,如果 S 是我的字符串,我希望能够为某些 i 执行此操作 s[i] = 'n'
但这对我来说看起来相当昂贵:
NSRange range = NSMakeRange(0,1);
NSString *newString = [S stringByReplacingCharactersInRange:range withString:@"n"];
不是吗??
是的,对于替换单个字符,复制整个字符串确实是一种矫枉过正。除非这是您的应用程序中的瓶颈(每秒调用一百万次),否则它不会对性能产生很大影响,但是使用NSMutableString
and仍然感觉更好,或者如果速度很重要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
注意:不要忘记导入您使用索引语法的类别。