我有几千个以“动词-名词”形式出现的字符串,我想从中提取名词部分。我正在寻找最快的方法来做到这一点。动词和名词部分可以是任意长度。
我努力了
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...
});
请记住,这将同时执行多个遍操作,因此请务必确定线程问题。