【问题标题】:Fastest way to manipulate strings in objective-c在objective-c中操作字符串的最快方法
【发布时间】:2013-05-27 11:38:09
【问题描述】:

我对 Objective C 比较陌生,我试图弄清楚如何在我知道该字符所在的索引的情况下有效地替换字符串中的字符。

基本上,如果 S 是我的字符串,我希望能够为某些 i 执行此操作 s[i] = 'n'

但这在我看来相当昂贵:

NSRange range = NSMakeRange(0,1);
NSString *newString = [S stringByReplacingCharactersInRange:range withString:@"n"];

不是吗??

【问题讨论】:

    标签: objective-c nsstring nsmutablestring


    【解决方案1】:

    是的,对于替换单个字符,复制整个字符串确实是一种矫枉过正。除非这是您的应用程序中的瓶颈(每秒调用一百万次),否则它不会对性能产生很大影响,但是使用NSMutableStringreplaceCharactersInRange:NSMakeRange(0, 1) withString:@"n" 仍然感觉更好,或者在速度快的情况下简单地回退到使用 C 字符串是必不可少的

    【讨论】:

    • 每秒几百次怎么样?
    • @user1541941 仍然微不足道。当我写百万时,我的意思是百万。
    【解决方案2】:

    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
    

    注意:不要忘记导入使用索引语法的类别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多