1

2つのNSArrayを比較するはるかに高速な方法はありますか?ニックネームが2つの配列に存在するかどうかを知り、それらのインデックスを取得する必要があります。

私の方法を見てください私たちはもっと速く何かをすることができると思います

-(void)classPseudo
{
     AppDelegate  *app = [[UIApplication sharedApplication]delegate];
     NSString * documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSString *fullFileName = [NSString stringWithFormat:@"%@/contactArray.txt", documentsPath];
     NSMutableArray *newOnlineArray = [[NSMutableArray alloc]initWithContentsOfFile:fullFileName];
     NSUInteger count = [newOnlineArray count];
     NSUInteger count2 = [app.messagePseudo count]; 
     for (NSUInteger index = 0; index < count; index++)
    {
        for (NSUInteger index2 = 0; index2 < count2; index2++)
        {

        dict1= [newOnlineArray objectAtIndex:index];
        st1 = [dict1 objectForKey:@"pseudo"];
        dict2= [app.messagePseudo objectAtIndex:index2];
         st2 = [dict2 objectForKey:@"expediteur"];
                if ([st2 isEqualToString:st1]) 
            {
                NSLog(@"YESS %d",index);

                 }
            else {
                NSLog(@"NOOOON");

            }
         }
    }
}

ヘルプが適用されます。事前に感謝します。

4

1 に答える 1

1

あなたはあなたの質問をあまり明確に説明していません。たとえば、関連するデータ構造については説明していません。(どうやら辞書の2つの配列。)あなたは出力としてあなたが望むものを正確に言っていません。そして、フランス語を話さない人にとって、「ニック」が「疑似」に対応する場合と「促進者」に対応する場合があることはすぐにはわかりません。予想されるデータセットについて説明していません。たとえば、各疑似は最初の配列に何度も現れると予想されますか、それとも数回現れると予想されますか?2番目のexpediteurについても同じです。

とにかく、「疑似」値のインデックスセットへのマップを作成することができます。次に、2番目の配列を繰り返し処理し、マップで探索者を検索します。

NSMutableDictionary* pseudoIndexes = [NSMutableDictionary dictionary];
[newOnlineArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    NSString* pseudo = [obj objectForKey:@"pseudo"];
    NSMutableIndexSet* indexes = [pseudoIndexes objectForKey:pseudo];
    if (!indexes)
    {
        indexes = [NSMutableIndexSet indexSet];
        [pseudoIndexes setObject:indexes forKey:pseudo];
    }
    [indexes addIndex:idx];
}];

[app.messagePseudo enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    NSString* expediteur = [obj objectForKey:@"expediteur"];
    NSIndexSet* indexes = [pseudoIndexes objectForKey:expediteur];
    NSLog(@"For expediteur #%d '%@', pseudo indexes %@", idx, expediteur, indexes);
}];
于 2012-05-28T19:50:52.660 に答える