我有一个 Place
对象数组。每个 Place
对象都有一个 name
和 code
属性,都是字符串。每个 Place
对象已经有一个 code
,但我需要从服务器查找 name
属性。我返回 2 个数组:一个包含名称,另一个包含代码。这些数组经过排序,以便 nameArray
中某个索引处的 name
与 codeArray 中同一索引处的
.code
完全对应
我一直循环遍历 Place
对象数组,然后检查该 Place
的 code
属性是否与codeArray
中的当前索引。如果是,我通过使用 nameArray
中的相同索引来设置该 Place
的 name
:
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/