我有几千个以“动词-名词”形式出现的字符串,我想从中提取名词部分。我正在寻找最快的方法来做到这一点。动词和名词部分可以是任意长度。

我努力了

NSString *noun = [[verb componentsSeparatedByString:@"-"] lastObject];

这很慢...对于我的3000多个条目列表,大约需要3秒。

也试过了
NSString *noun = [verb substringFromIndex:[verb rangeOfString:@"-"].location + 1];

这要快得多,大约半秒钟。

有人建议让它更快吗?

最佳答案

如果使用这些字符串是线程安全的,那么一种选择是使用GCD来同时遍历多个verb值,从而使多个内核起作用。使用dispatch_apply而不是您正在使用的任何循环,例如:

dispatch_apply([myWordArray count], queue, ^(size_t i) {
    NSString *verb = [myWordArray objectAtIndex:i];
    NSString *noun = [verb substringFromIndex:[verb rangeOfString:@"-"].location + 1];

    // do something with noun...
});

请记住,这将同时执行多个遍操作,因此请务必确定线程问题。

09-07 13:25