2016-12-15 3 views
2

Wie würden Sie dieses Array zählen?Im mehrdimensionalen Array zählen

NSArray *sortThisArray = @[@{@"numbers":@[@"One",@"Two"]}, 
           @{@"numbers":@[@"Two",@"One"]}, 
           @{@"numbers":@[@"One",@"Two",@"Three"]}, 
           @{@"numbers":@[@"One",@"Two",@"Three"]}, 
           @{@"numbers":@[@"One",@"Two",@"Three",@"Four"]}, 
           ]; 

Das gewünschte Ergebnis wäre dann:

NSArray *sortedArray = @[@{@"numbers":@[@"One",@"Two"], 
          @"occures":@(2)}, 

          @{@"numbers":@[@"One",@"Two",@"Three"], 
          @"occures":@(2)}, 

          @{@"numbers":@[@"One",@"Two",@"Three",@"Four"], 
          @"occures":@(1)}, 
          ]; 

Ich habe versucht, mit NSCountedSet und countForObject, aber die Ergebnisse sind ungenau. Es scheint nur die Arrays zu zählen, die genau gleich sind. Mit anderen Worten, das Array mit @[@"Two",@"One"] wird ignoriert, da es nicht 100% gleich @[@"One",@"Two"] ist, obwohl sie die gleichen Objekte und die gleiche Anzahl haben.

Antwort

-1

Kann so etwas wie dieses:

NSMutableArray *mArray = [NSMutableArray arrayWithArray:sortThisArray]; 
NSMutableArray *result = [[NSMutableArray alloc] init]; 


while ([mArray count]) { 
    NSDictionary *obj = [mArray firstObject]; 
    int count = 1; 
    for (int i=1; i<[mArray count]; i++) { 
     NSDictionary *sObj = [mArray objectAtIndex:i]; 
     if ([[sObj objectForKey:@"numbers"] count] == [[obj objectForKey:@"numbers"] count]) { 
      BOOL increase = YES; 
      for (int j=0; j<[[obj objectForKey:@"numbers"] count]; j++) { 
       if (![[sObj objectForKey:@"numbers"] containsObject:[[obj objectForKey:@"numbers"] objectAtIndex:j]]) { 
        increase = NO; 
       } 
      } 
      if (increase) { 
       count++; 
       [mArray removeObjectAtIndex:i]; 
      } 
     } 
    } 
    [mArray removeObjectAtIndex:0]; 
    [result addObject:@{@"numbers":obj, @"occurrs":[NSNumber numberWithInteger:count]}]; 
} 

* Code nicht getestet

+0

Versucht es, scheint nicht zu funktionieren ... Immer noch Duplikate im Ergebnis-Array –

0

Diese funktionieren sollte. Sie müssen einen konsistenten Weg haben, um Ihre Arrays zu vergleichen (entweder sortieren wie in diesem Beispiel oder indem Sie das NSArray zu NSSet verschieben).

Verwandte Themen