iphone - 比较/设置字符串的最快方法

标签 iphone objective-c ios ipad

我有一个 Place 对象数组。每个 Place 对象都有一个 namecode 属性,都是字符串。每个 Place 对象已经有一个 code,但我需要从服务器查找 name 属性。我返回 2 个数组:一个包含名称,另一个包含代码。这些数组经过排序,以便 nameArray 中某个索引处的 namecodeArray 中同一索引处的 code 完全对应.

我一直循环遍历 Place 对象数组,然后检查该 Placecode 属性是否与codeArray 中的当前索引。如果是,我通过使用 nameArray 中的相同索引来设置该 Placename:

for(int i = 0; i < [placesArray count]; i++)
{
    for(int j = 0; j < [codeArray count]; j++) {

       if([[[placesArray objectAtIndex:i] code] isEqualToString:[codeArray objectAtIndex:j]]) {   
            [[placesArray objectAtIndex:i] setName:[nameArray objectAtIndex:j]];
       }
    }
}

这可以工作,但速度不是很快 - 循环遍历 1000 多个地点可能需要 30 秒。

有没有更快的方法?

最佳答案

与任何时候您尝试优化性能一样,您应该使用 Instruments 分析代码以找出实际瓶颈所在。也就是说,循环遍历 placeArray 中的每个名称并进行字符串比较是非常低效的。

像这样怎么样?

NSMutableDictionary *placesByCode = [NSMutableDictionary dictionaryWithCapacity:[placesArray count]];
for (Place *aPlace in placesArray) {
    [dictionary setObject:aPlace forKey:aPlace.code];
}

NSMutableDictionary *namesByCode = [NSMutableDictionary dictionaryWithCapacity:[namesArray count]];
for (int i=0; i<[namesArray count]; i++) {
    NSString *name = [namesArray objectAtIndex:i];
    NSString *code = [codeArray objectAtIndex:i];
    [namesByCode setObject:name forKey:code];
}

for (NSString *code in namesByCode) {
    Place *place = [placesByCode objectForKey:code];
    place.name = [namesByCode objectForKey:namesByCode];
}

通过字典中的代码查找每个地点应该比手动循环遍历每个名​​称的整个地点数组要快得多。

关于iphone - 比较/设置字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181013/

相关文章:

iphone - 禁用快速查看

iphone - 为什么Objective C中的以下代码无法模拟 'message sent to deallocated instance '

ios - NSString 中的对象太多? %@.%@.%@ 产生格式错误

ios - 未调用 AsyncSocket 委托(delegate)

iphone - 播放视频而不中断音频 - Objective c

iOS:如何仅在用户拖动滚动条时才允许滚动?

ios - 带有参数 iOS 的单例

ios - subview 永远不可见

ios - 删除核心数据数据库,并在更新时重新创建它

ios - 将参数从一个 View Controller 传递到另一个 View Controller 时崩溃