2016-09-28 3 views
2

Ich habe eine zwei verschiedene Arrays hierGet ohne Duplikate auf Array-Index von Object

[ 
    "21:55", 
    "21:55", 
    "21:55", 
    "22:00", 
    "21:55" 
] 

i über zwei Arrays verwenden wie dies unten Code zu sortieren,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"HH:mm"]; 

     NSArray *sortedTimes = [timeArraySorting sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) 
     { 
      NSDate *date1 = [dateFormatter dateFromString:obj1]; 
      NSDate *date2 = [dateFormatter dateFromString:obj2]; 
      return [date1 compare:date2]; 
     }]; 
     NSLog(@"Start sortedTimes= %@",sortedTimes); 

nach dem zweiten Array Sortierung wie diese,

sortedTimes = [ 
     "21:55", 
     "21:55", 
     "21:55", 
     "21:55", 
     "22:00" 
    ] 

aber ich brauche zweiten Array erste Array zu vergleichen, um zu bekommen hier Indizes des ersten array.but i Duplikate wie diese,

[ 
    0, 
    0, 
    0, 
    0, 
    3 
] 

aber ich mag diese benötigen,

[ 
    0, 
    1, 
    2, 
    4, 
    3 
] 

Können Sie mir empfehlen, wie kann ich dieses Problem lösen? Danke.

+0

Wie erstellen und füllen Sie dieses zweite Array? –

+0

nach Sortierung des zweiten Array gefüllt. @phillip –

+0

** Wie ** machst du es, nicht ** wann **? –

Antwort

0

Eine Möglichkeit ist, Indizes zu dem ursprünglichen Array hinzuzufügen und auch zusammen mit den String-Daten ...

// data from the OP 
NSArray *timeArraySorting = @[ 
        @"21:55", 
        @"21:55", 
        @"21:55", 
        @"22:00", 
        @"21:55" 
        ]; 

// add index data to it, so it has the form: 
// @[ [ @"21:55", @0], [ @"21:55", @1], ... 
NSMutableArray *indexedTimeArray = [@[] mutableCopy]; 
for (int i=0; i<timeArraySorting.count; i++) { 
    [indexedTimeArray addObject: @[timeArraySorting[i], @(i)] ]; 
} 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm"]; 

// sort that indexed data 
NSArray *sortedTimes = [indexedTimeArray sortedArrayUsingComparator:^NSComparisonResult(NSArray *obj1, NSArray *obj2) { 
    NSDate *date1 = [dateFormatter dateFromString:obj1[0]]; 
    NSDate *date2 = [dateFormatter dateFromString:obj2[0]]; 
    return [date1 compare:date2]; 
}]; 
NSLog(@"Start sortedTimes= %@",sortedTimes); 

Ausgabe wie folgt zu sortieren aussieht:

Start sortedTimes= (
    (
    "21:55", 
    0 
), 
    (
    "21:55", 
    1 
), 
    (
    "21:55", 
    2 
), 
    (
    "21:55", 
    4 
), 
    (
    "22:00", 
    3 
) 
) 

Run durch das Array das Sortierergebnis zu Pickup und die sortierten Indizes ...

NSMutableArray *result = [@[] mutableCopy]; 
NSMutableArray *indexes = [@[] mutableCopy]; 

for (NSArray *a in sortedTimes) { 
    [result addObject:a[0]]; 
    [indexes addObject:a[1]]; 
} 

NSLog(@"result is %@", result); 
NSLog(@"indexes is %@", indexes); 

getestet, um die OP gewünschtes Ergebnis entsprechen.

+0

Danke @danh, funktioniert gut für meine Anforderung –