Iphone objective-c中的有效循环

Iphone objective-c中的有效循环,iphone,objective-c,ios,loops,Iphone,Objective C,Ios,Loops,我将其用作后端服务,但在本例中,我创建了两个模拟后端模式的示例数组(songs和ratings)歌曲由歌曲数据组成,这些数据将填充我的应用程序的表格分级由当前用户对歌曲的分级组成 最后,我需要遍历歌曲和评级,将用户评级嵌入到相应的歌曲字典中。我在下面包含了我的循环代码。这样做能更有效吗?我担心如果有太多的评级对象,这将花费太长时间 NSMutableArray *songs = [@[ @{ @"objectId" : @"

我将其用作后端服务,但在本例中,我创建了两个模拟后端模式的示例数组(
songs
ratings
)<代码>歌曲由歌曲数据组成,这些数据将填充我的应用程序的表格<代码>分级由当前用户对歌曲的分级组成

最后,我需要遍历
歌曲
评级
,将
用户评级
嵌入到相应的
歌曲
字典中。我在下面包含了我的循环代码。这样做能更有效吗?我担心如果有太多的
评级
对象,这将花费太长时间

    NSMutableArray *songs = [@[ @{
                                @"objectId" : @"111",
                                @"title" : @"Song Title" },
                                @{
                                @"objectId" : @"222",
                                @"title" : @"Song Title"
                             } ] mutableCopy];

    NSMutableArray *ratings = [@[ @{
                               @"objectId" : @"999",
                               @"parentObjectId" : @"111",
                               @"userRating" : @4
                               } ] mutableCopy];

    for (NSInteger a = 0; a < songs.count; a++) {

        NSMutableDictionary *songInfo = [songs objectAtIndex:a];
        NSString *songObjectId = [songInfo objectForKey:@"objectId"];
        NSNumber *userRating = @0;

        for (NSInteger i = 0; i < ratings.count; i++) {

            NSDictionary *userRatingInfo = [ratings objectAtIndex:i];
            NSString *parentObjectId = [userRatingInfo objectForKey:@"parentObjectId"];

            if ([parentObjectId isEqualToString:songObjectId]) {
                userRating = [userRatingInfo objectForKey:@"userRating"];
            }
        }
    [songInfo setObject:userRating forKey:@"userRating"];
    }
NSMutableArray*歌曲=[@]@{
@“objectId”:@“111”,
@“标题”:@“歌曲标题”},
@{
@“objectId”:@“222”,
@“标题”:@“歌曲标题”
}]mutableCopy];
NSMUTABLEARRY*评级=[@[@{
@“objectId”:@“999”,
@“parentObjectId”:@“111”,
@“用户评级”:@4
}]mutableCopy];
对于(NSInteger a=0;a
建立一个评级字典,而不是一个内部循环。您的时间复杂度将从n*m变为n+m,因为字典查找是按固定时间摊销的:

NSMutableDictionary*ratingsDict=[NSMutableDictionary dictionary with capacity:ratings.count];
用于(NSDictionary*评级中的评级){
NSString*parentObjectId=[rating objectForKey:@“parentObjectId]”;
[ratingsDict setObject:rating forKey:parentObjectId];
}
适用于(NSMUTABLEDDIctionary*歌曲中的歌曲){
NSString*songObjectId=[song objectForKey:@“objectId]”;
NSNumber*userRating=[ratingsDict objectForKey:songObjectId];
if(用户评级)
[song setObject:userRating forKey:@“userRating”];
}

wow-你做什么?@[和{做什么?不幸的是,我不知道如何用谷歌搜索它们!它们是静态数组和字典构造函数吗?它们是调用
[NSArray arraywhithobjects:…]和
[NSDictionary dictionary dictionary whithobjects和key:…]的快捷语法
。但不是静态的。关于它们的文档在哪里?我相信:它们是自(IIRC)Xcode 4.4以来的新语法。您必须使用现代运行时(即,除了32位Mac OS X以外的任何东西)